Como saber se uma janela com um determinado título já está aberta no Tk?

votos
7

Eu tenho escrito um script python pouco que só aparece uma caixa de mensagem que contém o texto passado na linha de comando. Quero colocá-la apenas quando a janela -resulting de um call anterior não está aberta.

from Tkinter import *
import tkMessageBox

root = Tk()
root.withdraw() 

# TODO not if a window with this title exists
tkMessageBox.showinfo(Key you!,  .join(sys.argv[1:]))

Qualquer idéia de como verificar isso?

Publicado 05/09/2008 em 12:07
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Eu acredito que você quer:

if 'normal' != root.state():
    tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:]))
Respondeu 05/09/2008 em 17:19
fonte usuário

votos
0

A resposta anterior funciona de acordo com o código que você forneceu. Você diz que não funciona porque o respondente está em conformidade com a regra "sois bête et disciplina" em que ele não adicionar root.mainloop()ao seu código desde a sua pergunta não quer.

Ao adicionar a linha mais tarde, por algum motivo causado pelo ciclo de eventos, você deve testar a string exata "retirada", como segue:

import tkinter as tk
from tkinter import messagebox
import sys


root = tk.Tk()
root.withdraw()

if 'withdrawn' != root.state():
   messagebox.showinfo("Key you!", sys.argv[1:])


root.mainloop()

Nota: não execute este código caso contrário sua sessão do Terminal irá desligar. Para contornar este desconforto, você terá que repor o estado da janela usando root.state("normal")o que levará a caixa de mensagem a desaparecer como se um clique no botão Ok ocorreu, ou root.iconify()através do qual você pode parar a sessão Terminal para desligar com um clique direito sobre o ícone tkinter aparecendo na barra de tarefas do sistema operacional.

Respondeu 19/11/2017 em 08:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more