Как поставить встроиную в программу иконку на заголовок окна программы на tkinter
У меня есть встроенная в программу иконка bitmapImg, так её можно встроить в кнопку:
import tkinter as tk
app = tk.Tk()
bitmapImgRaw = """#define bitmapimg_width 32
#define bitmapimg_height 32
static unsigned char bitmapimg_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x00,
0x30, 0x00, 0xf0, 0x03, 0x30, 0x00, 0xf0, 0x03, 0x30, 0x00, 0xf0, 0x0f,
0x30, 0x00, 0xf0, 0x0f, 0x30, 0xff, 0xf0, 0x0f, 0x30, 0xff, 0xf0, 0x0f,
0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0xff, 0x3f, 0x0c,
0x30, 0xff, 0x3f, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c,
0x30, 0xff, 0x3f, 0x0c, 0x30, 0xff, 0x3f, 0x0c, 0x30, 0x00, 0x00, 0x0c,
0x30, 0x00, 0x00, 0x0c, 0x30, 0xff, 0x3f, 0x0c, 0x30, 0xff, 0x3f, 0x0c,
0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0xc0, 0xff, 0xff, 0x03,
0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };"""
bitmapImgGreen = tk.BitmapImage(data=bitmapImgRaw, foreground="green")
bitButton = tk.Button(master=app, image=bitmapImgGreen)
bitButton.pack()
app.mainloop()
Но как встроить вшиваемое изображение (bitmap или фото) в заголовок окна?
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from PIL import Image # +++
from io import BytesIO # +++
import tkinter as tk
app = tk.Tk()
bitmapImgRaw = """#define bitmapimg_width 32
#define bitmapimg_height 32
static unsigned char bitmapimg_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x00,
0x30, 0x00, 0xf0, 0x03, 0x30, 0x00, 0xf0, 0x03, 0x30, 0x00, 0xf0, 0x0f,
0x30, 0x00, 0xf0, 0x0f, 0x30, 0xff, 0xf0, 0x0f, 0x30, 0xff, 0xf0, 0x0f,
0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0xff, 0x3f, 0x0c,
0x30, 0xff, 0x3f, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c,
0x30, 0xff, 0x3f, 0x0c, 0x30, 0xff, 0x3f, 0x0c, 0x30, 0x00, 0x00, 0x0c,
0x30, 0x00, 0x00, 0x0c, 0x30, 0xff, 0x3f, 0x0c, 0x30, 0xff, 0x3f, 0x0c,
0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0xc0, 0xff, 0xff, 0x03,
0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };"""
bitmapImgGreen = tk.BitmapImage(data=bitmapImgRaw, foreground="green")
bitButton = tk.Button(master=app, image=bitmapImgGreen)
bitButton.pack()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
_xbm = bitmapImgRaw.encode()
dimg = Image.open(BytesIO(_xbm))
dimg.save('myTest.png', format = 'PNG', sizes=[(32,32)])
app.tk.call('wm', 'iconphoto', app._w, tk.PhotoImage(file='myTest.png')) # !!!
app.title('Bitmap_Img_Raw')
app.geometry("300x200")
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app.mainloop()
Автор решения: Anty
→ Ссылка
Изображение можно вшить как gif закодированный в base64. Так оно будет выглядеть:
appImgB64 = """R0lGODlhIAAgAIABAAC7AP///yH+FWJ5IEFudHlFbG8sIHdpdGggR0lNUAAh+QQBCgABACwAAAAA
IAAgAAACf4wDqcutB5GbM0pLX0yQ7wxg4SWBoLGg5lmOngV/qvfGNq3hKan2rd/wAV2OzkhIMhmX
Bx1lliMaM1AcUtk8/j7U7FRbLXrHNexVmu2emWae21kZr1vx+TD41pbRuz1zCIVkA+MkOCiztcLS
p/iUBEYn9ucWhjdZ2VjzlbljUAAAOw=="""
Его можно превратить в PhotoImage, а уже его дать окну через .iconphoto(0, image):
import tkinter as tk
app = tk.Tk()
app.title("Волшебство 80lvl")
app.geometry("300x225") # 4:3
appImgB64 = """R0lGODlhIAAgAIABAAC7AP///yH+FWJ5IEFudHlFbG8sIHdpdGggR0lNUAAh+QQBCgABACwAAAAA
IAAgAAACf4wDqcutB5GbM0pLX0yQ7wxg4SWBoLGg5lmOngV/qvfGNq3hKan2rd/wAV2OzkhIMhmX
Bx1lliMaM1AcUtk8/j7U7FRbLXrHNexVmu2emWae21kZr1vx+TD41pbRuz1zCIVkA+MkOCiztcLS
p/iUBEYn9ucWhjdZ2VjzlbljUAAAOw=="""
# gif в base64
appImgP = tk.PhotoImage(data=appImgB64)
app.iconphoto(0, appImgP)
app.mainloop()


