2013-03-09 5 views
6

Ora, so che è possibile controllare per vedere se esiste una finestra:Come verificare se esiste un widget in Tkinter?

x.winfo_exists() 

che restituisce un valore booleano. Ora ho cercato ma non sono stato in grado di trovare esattamente ciò di cui ho bisogno. Più in particolare, ho bisogno di verificare l'esistenza dei miei pulsanti, etichette, elenchi, cursori, ecc.

+1

La tua domanda non è chiara. Dici di sapere che puoi chiamare 'winfo_exists' per determinare se esiste un widget, ma non sai come dire se esistono _your_ widget? –

+0

NO, per vedere se esiste una finestra. Non sapevo che funzionasse anche per i widget finché non ho ottenuto questa risposta. Grazie a proposito. – madprogramer

risposta

15

winfo_exists restituisce 1 a meno che non abbia distrutto il widget, nel qual caso restituisce 0. Questo metodo può essere chiamato su qualsiasi classe di widget , non solo la radice Tk o Toplevels. In alternativa, è possibile ottenere tutti i figli di un widget con winfo_children:

>>> import Tkinter as tk 
>>> root = tk.Tk() 
>>> label = tk.Label(root, text="Hello, world") 
>>> label.winfo_exists() 
1 
>>> root.winfo_children() 
[<Tkinter.Label instance at 0x0000000002ADC1C8>] 
>>> label.destroy() 
>>> label.winfo_exists() 
0 
>>> root.winfo_children() 
[] 
+0

Nel caso in cui non hai restituito oggetto frame a "root" (o direttamente non creato da esso) non sarai in grado di fare 'label.destroy()', ma puoi ancora cercare ed iterare su 'root. lista winfo_children() '. Ad esempio, 'root.winfo_children() [0] .destroy()' o 'root.winfo_children() [1] .destroy()' nel caso in cui tu abbia un Menu in cima. In ogni caso è più facile creare maniglie per ogni frame che usi, oltre a inserire ogni pulsante/etichetta/ecc all'interno di un frame principale. – erm3nda

1

È possibile anche stampare il tipo cioè .. tipo (etichetta). Questo può essere utile per fornire non solo l'esistenza, ma anche scoprire se qualcosa sta arrivando 'NoneType' senza errori. Il tipo() ti dirà se hai un'istanza, o un altro tipo che può fornire preziosi indizi su quanto è vicino il programma sta eseguendo o restituire gli oggetti a ciò che pensi di chiedere! Object.winfo_exists() e object.winfo_children sono specifici e verranno visualizzati attraverso un errore se l'oggetto non è un tipo "istanza".

+0

[come scrivere una buona risposta] (http://stackoverflow.com/help/how-to-answer) – Manish