Python 删除Tkinter窗口上的TK图标
如何从窗口的标题栏中删除tkinter图标据我所知,最接近“空白”图标的是使用与窗口标题栏颜色相同的图标。但是很多用户使用不同的颜色主题,所以效果不太好 但是,如果您使用py2exe,您可以使用类似的东西来交换图标。但是在python程序的文本状态下,最好的方法是替换。Jar文件如何使用java图标,tkinter应用程序将具有TK图标。毕竟,和java一样,你的应用程序也被一个中间程序翻译。由于另一个程序正在运行您的代码,您必须修改另一个程序。幸运的是,python/tk在图标方面比JVM灵活一点,因此您可以替换图标。但目前还不能完全删除它 -约翰在窗户上 第一步:Python 删除Tkinter窗口上的TK图标,python,python-3.x,tkinter,tk,Python,Python 3.x,Tkinter,Tk,如何从窗口的标题栏中删除tkinter图标据我所知,最接近“空白”图标的是使用与窗口标题栏颜色相同的图标。但是很多用户使用不同的颜色主题,所以效果不太好 但是,如果您使用py2exe,您可以使用类似的东西来交换图标。但是在python程序的文本状态下,最好的方法是替换。Jar文件如何使用java图标,tkinter应用程序将具有TK图标。毕竟,和java一样,你的应用程序也被一个中间程序翻译。由于另一个程序正在运行您的代码,您必须修改另一个程序。幸运的是,python/tk在图标方面比JVM灵活
from tkinter import *
tk = Tk()
tk.iconbitmap(default='transparent.ico')
lab = Label(tk, text='Window with transparent icon.')
lab.pack()
tk.mainloop()
使用图标编辑器或类似网站的工具创建透明图标。将其另存为透明.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
图标。类似于公认的答案(缺点是更丑):
它只是动态创建文件,因此您不必随身携带额外的文件。使用相同的方法,您还可以为Unix创建一个“.xbm”图标
编辑:由于以下原因,图标可以进一步缩短:
根据之前的回答,我使用了此解决方案:
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()
更新:
稍微修改的代码(try
子句而不是if TkVersion
)在以下位置上生成一个透明(no)图标:
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()
在Python2.7和Windows10上,这可以很好地工作,为您的新应用程序生成所需的“无图标”
然而,在Python3.6 Win 8.1上,这会阻塞GUI,我认为这与较新的Tk 8.6有关,尽管我发现在这种情况下使用wm_iconphoto()
的新8.6表示法没有受到限制:
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中的透明图标
可能有一种方法可以使用“透明度集”逐个设置像素的透明度-
然而,我不知道通过Tkinter是否可行。上帝喜欢勇敢的人,但轮到别人了
更新的问题:为什么这在Py3.6/Windows上不起作用?替代@ubomb的解决方案,通过利用Tkinter.PhotoImage
的内置支持处理.gif
图像来添加自定义图像
从文件:
icon=Tkinter.PhotoImage(file=“logo.gif”)
从base64开始:
gif_base64_string=“”r0lgoddheaaqaaaaaaaaaebaqicagmdawqebaufqygbgcchbwgicakjcqokcgslcwwmda0ndq4o dg8pdxaqebererisehmtextexqufffruwffwhcxgygbkzgroaghxwchb0dhr4ehh8fhagiceh…4B8AAP9Ci/4oltpfwd+qv4nohvads=“””
icon=Tkinter.PhotoImage(data=gif\u base64\u string)
有关更多详细信息,请访问以下链接:
//effbot.org/tkinterbook/photoimage.htm最近,我在中找到了一个Linux解决方案
该解决方案使用iconbitmap和iconmask,其中包含一个空白(用零填充).xbm文件
那么,首先,什么是.xbm文件?
xbm文件是一种纯文本(实际上是C代码!)图像格式,通常用于存储位图,数据存储为二维矩阵(二维数组或数组数组)
对于8位(256个可能值,从0到255)大小的元素,矩阵表示为单个一维数组加上定义其形状的值
数据可以以任何方式解释,但通常被解释为单色/灰度图像
iconbitmap
我们的第一个方法称为iconbitmap,用于将位图设置为tkinter窗口的图标,我们可以输入.xbm文件的位置,并将其表示为
单色/灰度图标,.xbm的像素/元素表示不同的灰度级别,记住像素/元素是8位值
在0-255范围内,因此值0将表示为黑色,255将表示为白色,其他值将是两个值之间的插值
iconmask
我们的第二种方法叫做iconmask,这里是魔术发生的地方,它用于设置窗口图标像素的alpha/透明度值,
我们可以输入.xbm文件的位置,并且.xbm中值为0的元素将被设置为完全透明,我已经在Debian上使用xfce4和透明值对其进行了测试
在0-255范围内似乎没有线性插值
我们的解决方案
有了这些信息,我们可以通过以下方式使用tkinter创建一个透明图标:
导入tkinter
tk=tkinter.tk()
#文件路径必须以“@”开头,否则这些方法将引发异常。
xbm_location=“@blank.xbm”
#在这里,我们使用xbm位置调用iconbitmap方法,因为它是一个空白的xbm(用零填充),它将被表示为一个黑色图标。
传统iconbitmap(xbm_位置)
#这里我们使用xbm位置调用iconmask方法,因为它是一个空白的xbm(用零填充),所以它将表示为一个完全透明的图标。
tk.iconmask(xbm_位置)
还有我们的解决方案,我也在Windows上测试了它,系统似乎忽略了iconmask方法,所以请继续使用适用于Windows代码的其他解决方案
另一种可能的解决方案是使用iconphoto方法,从完全透明的.gif文件甚至c
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()