2008-09-05 81 views
7

He escrito un pequeño script de Python que solo muestra un cuadro de mensaje que contiene el texto pasado en la línea de comando. Quiero mostrarlo solo cuando la ventana -resultado de una llamada anterior- no esté abierta.¿Cómo saber si una ventana con un título dado ya está abierta en 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:])) 

¿Alguna idea de cómo comprobar eso?

Respuesta

2

Te creo quieren:

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

He intentado esto, no funciona, la nueva ventana se abre de todos modos. Quizás no estaba lo suficientemente claro: dos intérpretes de Python se están ejecutando al mismo tiempo. Quiero que el segundo proceso salga cuando el otro se está ejecutando, es decir, cuando la ventana -o cualquier ventana con ese título- ya esté abierta. – Tibi

0

La respuesta anterior funciona de acuerdo a un código que ha proporcionado. Usted dice que no funciona porque el respondedor cumple con la regla "sois bête et discipliné" en el sentido de que no agregó root.mainloop() a su código ya que su pregunta tampoco.

Mediante la adición de la línea más tarde, por alguna razón causada por el bucle de eventos, debe probar la cadena exacta "retirada" de la siguiente manera:

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: no ejecute el código de lo contrario su sesión de terminal colgar. Para evitar esta incomodidad, tendrá que restablecer el estado de la ventana usando root.state("normal"), lo que hará que desaparezca el cuadro de mensaje como si se hubiera hecho clic en el botón Aceptar o root.iconify(), a través del cual puede detener la sesión de la Terminal para colgar haciendo clic en el icono de tkinter que aparece en la barra de tareas del sistema operativo.

Cuestiones relacionadas