如何在tkinter窗口被最小化时切换标题?
我有一个使用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")