Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除Tkinter窗口上的TK图标_Python_Python 3.x_Tkinter_Tk - Fatal编程技术网

Python 删除Tkinter窗口上的TK图标

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灵活

如何从窗口的标题栏中删除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()