2015-10-07 142 views
0

我重新使用了我在这里找到的代码来设置TK图标的透明度,但它将TK遗留在被调用的窗口中。我创建了第二个窗口,我可以编辑该标题。但是,为什么我不能编辑从现有帖子中找到的代码。我到处看看,但是我做的新窗口,标题可以编辑,为什么不用Tk的其他窗口呢?从窗口中删除TK标题Python tkinter

from tkinter import * 
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) 

root = Tk() 

root.title("rename")  

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



root.mainloop() 
+0

您有两个'Tk'对象。不要这样做。 – TigerhawkT3

+0

我知道我有两个tkinter导入,但我只是准备说摧毁一个窗口或隐藏它。并使用第二个窗口。 – mydiax

+0

你有两个'Tk'_objects_:'root'和'tk'。你不应该那样做。 – TigerhawkT3

回答

2

首先,你不应该在同一个程序中创建多个Tk()应用程序。

发生此问题的原因是您使用Tk()创建新窗口(应用程序),但您只重命名标题为root的应用程序。这不会重命名tk应用程序的标题。你创建的。

如果您只想将标题重命名为带有标签的窗口 - 带透明图标的窗口。。您应该使用tk.title()(而不是root.title())。示例 -

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.title("rename") 
tk.iconbitmap(default=ICON_PATH) 
label = tkinter.Label(tk, text="Window with transparent icon.") 
label.pack() 
tk.mainloop() 

而且你也不需要多个tkinter进口,它不会做任何事情。导入tkinter(或任何模块)一旦将其缓存在sys.modules中,并且只要您尝试再次导入它,就会从sys.modules获得该缓存模块。


如果你想在你的应用程序中创建更多的窗口,你应该使用Toplevel widget。示例 -

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.title("rename") 

tknewwindow = tkinter.Toplevel(tk) 
tknewwindow.title("rename1") 
tknewwindow.iconbitmap(default=ICON_PATH) 

label = tkinter.Label(tknewwindow, text="Window with transparent icon.") 
label.pack() 

tk.mainloop() 
+0

谢谢,我刚刚开始使用GUI应用程序和Tkinter。我认为这应该是为那些希望在他们的窗户中拿走Tk的人主演的。 – mydiax

+0

很高兴我能帮到你! :-)如果答案有帮助,我想要求您接受答案(通过点击答案左侧的勾号),这对社区会有帮助。 –