Eu tenho um aplicativo tkinter que tem no título da janela o nome completo do caminho do arquivo que é carregado no aplicativo. Como o nome do caminho geralmente é longo, ele só pode ser exibido quando a janela não está minimizada. Quando é minimizado (para um ícone), apenas o início do nome do caminho fica visível. Então, quero mudar o título apenas para o nome do arquivo no momento, a janela será minimizada. Encontrei uma solução para isso aqui e adaptei ao meu problema:
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()
Como você pode ver no meu código de exemplo, a solução funciona. Mas não gosto disso porque a ligação usada não é ativada apenas uma vez, mas 2 vezes, quando a janela é minimizada (na minha grande aplicação ela é ativada 10 vezes quando a janela é minimizada). Por isso a variável title_saved deve ser verificada, caso já não esteja mais vazia.
Por isso estou procurando uma solução mais elegante, principalmente porque acredito que mudar o título na minimização deve ser um problema comum.
Você tem alguma ideia?
Quando você vincula à janela raiz, essa ligação é herdada por todas as janelas. A solução simples é verificar para qual janela o evento se destina e só fazer o trabalho quando a janela for a janela raiz.