python - tkinter是什么 - 删除Tkinter窗口上的TK图标




tkinter布局 (4)

有谁知道如何让图标不显示? 我正在寻找一种没有图标的方法。


在Windows上

步骤1:

使用图标编辑器或rw-designer等网站创建透明图标。 保存为transparent.ico

第二步:

from tkinter import *

tk = Tk()
tk.iconbitmap(default='transparent.ico')
lab = Label(tk, text='Window with transparent icon.')
lab.pack()
tk.mainloop()

在Unix上

类似的东西,但使用xbm图标。


更新:

稍微修改过的代码( try子句而不是if TkVersion )会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有关,虽然我发现使用wm_iconphoto()的新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?


根据之前的回复我使用了这个解决方案:

from PIL import ImageTk
import zlib,base64
import Tkinter

icon=zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))
root=Tkinter.Tk()
image=ImageTk.PhotoImage(data=icon)
root.tk.call('wm', 'iconphoto', root._w, image)
root.mainloop()

类似于接受的答案(与丑陋的骗局):

import tkinter
import tempfile

ICON = (b'\x00\x00\x01\x00\x01\x00\x10\x10\x00\x00\x01\x00\x08\x00h\x05\x00\x00'
        b'\x16\x00\x00\x00(\x00\x00\x00\x10\x00\x00\x00 \x00\x00\x00\x01\x00'
        b'\x08\x00\x00\x00\x00\[email protected]\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
        b'\x00\x01\x00\x00\x00\x01') + b'\x00'*1282 + b'\xff'*64

_, ICON_PATH = tempfile.mkstemp()
with open(ICON_PATH, 'wb') as icon_file:
    icon_file.write(ICON)

tk = tkinter.Tk()
tk.iconbitmap(default=ICON_PATH)
label = tkinter.Label(tk, text="Window with transparent icon.")
label.pack()

tk.mainloop()

它只是在运行中创建文件,因此您不必携带额外的文件。 使用相同的方法,您也可以为Unix执行'.xbm'图标。

编辑:由于@Magnus Hoff , ICON可以进一步缩短:

import base64, zlib

ICON = zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
    'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))




tk