2008-09-05 9 views
7

Я написал небольшой скрипт python, который просто открывает окно сообщения, содержащее текст, переданный в командной строке. Я хочу всплывать только тогда, когда окно, выходящее из предыдущего вызова, не открывается.Как узнать, открыто ли окно с данным заголовком в Tk?

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:])) 

Любая идея, как проверить это?

ответ

2

Я считаю, что вы хотите:

if 'normal' != root.state(): 
    tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:])) 
+0

Я пробовал это, он не работает, новое окно открывается в любом случае. Возможно, я не был достаточно ясен: одновременно работают два переводчика python. Я хочу, чтобы второй процесс вышел, когда другой работает, то есть когда окно или любое окно с этим заголовком уже открыто. – Tibi 2008-10-13 12:01:58

0

Предыдущий ответ работает в соответствии с кодом, которую вы предоставили. Вы говорите, что это не сработало, потому что отвечающий соблюдает правило «sois bête et studentliné» в том, что он не добавил root.mainloop() к своему коду, так как ваш вопрос тоже не является.

Добавляя позднюю линию, по какой-то причине, вызванной циклом обработки событий, вы должны проверить точную строку «отменила» следующим образом:

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() 

Примечание: не запускайте этот код в противном случае ваш терминальный сеанс будет повесить трубку. Чтобы обойти этот дискомфорт, вам придется сбросить состояние окна, используя root.state("normal"), который приведет к исчезновению окна сообщения, как если бы нажимал кнопку «ОК», или root.iconify(), через который вы можете остановить сеанс терминала, чтобы повесить трубку справа нажав на значок tkinter, появляющийся на панели задач ОС.