2008-09-05 7 views
7

Ich habe ein kleines Python-Skript geschrieben, das nur ein Meldungsfeld mit dem Text anzeigt, der in der Befehlszeile übergeben wurde. Ich möchte es nur öffnen, wenn das Fenster, das von einem vorherigen Anruf stammt, nicht geöffnet ist.Woher wissen Sie, ob ein Fenster mit einem bestimmten Titel bereits in Tk geöffnet ist?

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

Irgendeine Idee, wie man das überprüft?

Antwort

2

ich Sie glauben wollen:

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

Ich habe es versucht, es funktioniert nicht, das neue Fenster öffnet sich trotzdem. Vielleicht war ich nicht klar genug: Zwei Python-Interpreter laufen zur gleichen Zeit. Ich möchte, dass der zweite Prozess beendet wird, wenn der andere ausgeführt wird, d. H. Wenn das Fenster - oder ein Fenster mit diesem Titel - bereits geöffnet ist. – Tibi

0

Die bisherige Antwort arbeitet entsprechend dem Code, den Sie zur Verfügung gestellt haben. Sie sagen, dass es nicht funktioniert, weil der Beantworter die Regel "sois bête et discipliné" erfüllt, indem er seinem Code root.mainloop() nicht hinzugefügt hat, da dies auch in Ihrer Frage nicht der Fall ist.

durch die spätere Zeile hinzufügen, aus irgendeinem Grund von der Ereignisschleife verursacht, sollten Sie die exakte Zeichenfolge testen „zurückgezogen“ wie folgt:

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

Hinweis: laufen Sie diesen Code nicht anders Terminalsitzung wird auflegen. Um dieses Unbehagen zu umgehen, müssen Sie den Fensterstatus entweder mit root.state("normal") zurücksetzen, was dazu führt, dass das Meldungsfeld verschwindet, als ob ein Klick auf die OK-Schaltfläche aufgetreten wäre, oder root.iconify(), durch den Sie die Terminal-Sitzung beenden können, um richtig aufzulegen Klicken Sie auf das tkinter-Symbol, das auf Ihrer OS-Taskleiste angezeigt wird.