2008-09-05 20 views
7

J'ai écrit un petit script python qui affiche simplement une boîte de message contenant le texte passé sur la ligne de commande. Je veux le faire apparaître uniquement lorsque la fenêtre -résultant d'un appel précédent- n'est pas ouverte.Comment savoir si une fenêtre avec un titre donné est déjà ouverte dans 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:])) 

Une idée de comment vérifier?

Répondre

2

Je crois que vous voulez:

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

J'ai essayé cela, ça ne marche pas, la nouvelle fenêtre s'ouvre quand même. Peut-être que je n'étais pas assez clair: Deux interpréteurs python s'exécutent en même temps. Je veux que le second processus se termine lorsque l'autre est en cours d'exécution, c'est-à-dire lorsque la fenêtre ou toute fenêtre portant ce titre est déjà ouverte. – Tibi

0

La réponse précédente fonctionne donc au code que vous avez fourni. Vous dites que ça ne marche pas parce que le répondeur se conforme à la règle "sois bête et discipliné" en ce qu'il n'a pas ajouté root.mainloop() à son code puisque votre question ne l'est pas non plus.

En ajoutant la ligne plus tard, pour une raison quelconque provoquée par la boucle d'événement, vous devez tester la chaîne exacte « retirée » comme suit:

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

Note: ne pas exécuter ce code sinon votre session Terminal Raccrocher. Pour contourner cette gêne, vous devrez réinitialiser l'état de la fenêtre en utilisant soit root.state("normal") qui conduira à la boîte de message pour disparaître comme si un clic sur le bouton Ok s'est produit, ou root.iconify() à travers lequel vous pouvez arrêter la session Terminal à raccrocher de droite en cliquant sur l'icône tkinter apparaissant dans la barre des tâches de votre système d'exploitation.

Questions connexes