如何在tkinter窗口被最小化时切换标题?

0 投票
1 回答
31 浏览
提问于 2025-04-14 17:52

我有一个使用tkinter制作的应用程序,窗口标题显示的是加载到应用程序中的文件的完整路径名。因为这个路径名通常很长,所以只有在窗口没有被最小化的时候才能完整显示。当窗口被最小化(变成一个图标)时,只能看到路径名的开头部分。因此,我想在窗口最小化的瞬间,把标题改成只有文件名。我在这里找到了一个解决方案,并把它调整成适合我的问题:

import tkinter as tk

title_saved = ""
def __made_to_window(event):
    print("__made_to_window")
    global title_saved
    if title_saved!="":
        root.title(title_saved)
        title_saved = ""

def __made_to_icon(event):
    print("__made_to_icon")
    global title_saved
    if title_saved=="":
        title_saved = root.title()
    root.title("filename.py")

root = tk.Tk()
root.title("C/folder1/folder2/folder3/folder4/folder5/filename.py")

canvas = tk.Canvas(root, height=100, width=400)
canvas.grid()
root.bind("<Unmap>", __made_to_icon)
root.bind("<Map>"  , __made_to_window)
root.mainloop()

从我的示例代码可以看出,这个解决方案是有效的。但是我不太喜欢,因为使用的绑定不仅在窗口最小化时激活一次,而是激活了两次(在我的大型应用程序中,窗口最小化时会激活10次)。因此,我必须检查变量title_saved,看看它是否已经不为空了。

所以我在寻找一个更优雅的解决方案,特别是因为我觉得在最小化时更改标题应该是一个常见的问题。

你有什么想法吗?

1 个回答

1

当你把某个操作绑定到主窗口时,这个绑定会被所有的窗口继承。简单的解决办法是检查这个事件是针对哪个窗口的,只有在事件是针对主窗口时才去执行相关的操作。

def __made_to_icon(event):
    global title_saved
    if event.widget == root:
        print("__made_to_icon")
        if title_saved=="":
            title_saved = root.title()
            root.title("filename.py")

撰写回答