从窗口标题 Python tkinter 中删除 TK

Posted

技术标签:

【中文标题】从窗口标题 Python tkinter 中删除 TK【英文标题】:Removing TK from Window Title Python tkinter 【发布时间】:2016-01-04 07:32:58 【问题描述】:

我重新使用了我在此处找到的代码来设置 TK 图标的透明度,但它会将 TK 留在调用的窗口中。我创建了第二个窗口,并且可以编辑该标题。但是为什么我不能编辑从现有帖子中找到的代码。我到处看了看,但是我做的新窗口,标题可以编辑,为什么不能在另一个窗口中包含 Tk?

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\x00@\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()

【问题讨论】:

您有两个 Tk 对象。不要那样做。 我知道我有两个 tkinter 导入,但我正准备说销毁一个窗口或隐藏它。并使用第二个窗口。 您有两个Tk 对象roottk。你不应该那样做。 【参考方案1】:

首先,你不应该在同一个程序中创建多个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\x00@\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\x00@\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()

【讨论】:

谢谢,我刚开始使用 GUI 应用程序和 Tkinter。我认为应该为那些希望在他们的窗户中拿走 Tk 的人加注星标。 很高兴能为您提供帮助! :-) 如果答案有帮助,我想请您接受答案(通过单击答案左侧的勾号),这将对社区有所帮助。

以上是关于从窗口标题 Python tkinter 中删除 TK的主要内容,如果未能解决你的问题,请参考以下文章

删除 Tkinter 窗口上的 TK 图标

按钮点击后,Python tkinter在框架中显示文本

Python Tkinter 从标签中删除/删除图像

暂停执行,直到从 tkinter 窗口收到用户输入

tkinter:在窗口中显示时间

在 Python(和 OS X)中将焦点设置到 Tkinter 窗口