Как узнать, открыто ли уже окно с данным заголовком в Tk? - PullRequest
7 голосов
/ 05 сентября 2008

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

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 ]

2 голосов
/ 05 сентября 2008

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

if 'normal' != root.state():
    tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:]))
0 голосов
/ 19 ноября 2017

Предыдущий ответ работает в соответствии с кодом, который вы указали. Вы говорите, что это не работает, потому что отвечающий соблюдает правило «sois bête et дисциплина» в том смысле, что он не добавил 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"), что приведет к исчезновению окна сообщения, как если бы произошел щелчок по кнопке Ok, либо root.iconify(), через который вы можете остановить сеанс терминала, повесьте трубку, щелкнув правой кнопкой мыши значок tkinter, отображаемый на панели задач вашей ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...