2013-03-09 11 views
6

Teraz wiem, że można sprawdzić, czy istnieje przez okno:Jak sprawdzić, czy widżet istnieje w Tkinter?

x.winfo_exists() 

która zwraca wartość logiczną. Teraz przeszukałem, ale nie udało mi się znaleźć dokładnie tego, czego potrzebuję. Dokładniej muszę sprawdzić istnienie moich przycisków, etykiet, list boxów, suwaków itp.

+1

Twoje pytanie jest niejasne. Mówisz, że wiesz, że możesz nazwać 'winfo_exists', aby ustalić, czy widżet istnieje, ale nie wiesz, jak określić, czy istnieją twoje widgety? –

+0

NIE, aby sprawdzić, czy okno istnieje. Nie wiedziałem, że działa również na widżety, dopóki nie otrzymam tej odpowiedzi. Dzięki, przy okazji. – madprogramer

Odpowiedz

15

winfo_exists zwraca 1, chyba że zniszczyłeś widżet, w takim przypadku zwraca 0. Ta metoda może być wywołana w dowolnej klasie widżetów , nie tylko korzeń Tk lub Toplevels. Alternatywnie, można uzyskać wszystkie dzieci widget z 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

W przypadku, gdy nie powróciłeś obiektu klatek do "root" (lub bezpośrednio nie będąc z niego tworzonym) nie będziesz w stanie wykonać 'label.destroy()', ale wciąż możesz wyszukiwać i iterować 'root. lista 'winfo_children()'. Jako przykład, 'root.winfo_children() [0] .destroy()' lub 'root.winfo_children() [1] .destroy()' w przypadku, gdy masz Menu u góry. W każdym razie łatwiej jest tworzyć uchwyty dla każdej używanej ramki, a także wstawić każdy przycisk/etykietę/itp. Do głównej ramki. – erm3nda

1

Można również wydrukować typ tj .. typ (etykiecie). Może to być pomocne, aby zapewnić nie tylko istnienie, ale także znaleźć, jeśli coś nadchodzi "NoneType" bez błędu. Typ() powie ci, czy masz instancję, lub inny typ, który może dostarczyć cennych wskazówek, jak zamknąć program lub zwrócić przedmioty na to, o czym myślisz! Obiekty object.winfo_exists() i object.winfo_children są specyficzne i będą powodowały błąd, jeśli obiekt nie jest typem 'instance'.

+0

[jak napisać dobrą odpowiedź] (http://stackoverflow.com/help/how-to-answer) – Manish