Обновление:
Слегка измененный код (выражение try
вместо if TkVersion
) создает прозрачный значок (нет) на:
Linux (Mint 18.1), Python 2.7
Linux (Mint 18.1), Python 3.5.1
Windows 10, Python 2.7.13
Выдает черный значок (не работает) на:
Windows 8.1, Python 3.6
Довольно старый вопрос, но решения не помогли мне. Я нашел частичное простое решение с моим собственным вопросом.
Частичное решение (Tk 8.5, см. Ниже) - с использованием метода PhotoImage blank()
:
from Tkinter import *
root=Tk()
icon=PhotoImage(height=16, width=16)
icon.blank()
root.tk.call('wm', 'iconphoto', self.master._w, icon)
root.mainloop()
В Python 2.7, Windows 10 это работает нормально, создавая желаемую иконку «нет» для вашего нового приложения.
Однако в Python 3.6, Win 8.1 это приводит к застреванию GUI, который, я думаю, связан с более новым Tk 8.6, и хотя я обнаружил, что новая нотация 8.6 с использованием wm_iconphoto()
действительно проходит без помех в этом случае:
try:
from tkinter import *
except:
from Tkinter import *
root=Tk()
#Identical for Py2.7/Tk8.5 and Py3.5/Tk8.6
icon=PhotoImage(height=16, width=16)
icon.blank()
#Picking a notaion based on Tk version to avoid jamming
try:
root.wm_iconphoto('True', icon) #New Tk 8.6 style
else:
#Jams Python 3.5 with Tk 8.6 on Windows
root.tk.call('wm', 'iconphoto', self.master._w, icon)
root.mainloop()
Выдает черный значок 3,6 вместо прозрачного в случае 2,7 / 8,5.
Может быть способ установить прозрачность пикселей один за другим, используя «набор прозрачности» -
http://wiki.tcl.tk/1449
Однако я не знаю, возможно ли это сделать даже через Tkinter. Бог благоволит к смелым, хотя чья-то очередь?
Обновленный вопрос : Почему это не работает в Py3.6 / Windows?