2013-03-09 12 views
6

Şimdi, bir pencere tarafından olup olmadığını görmek için kontrol edebileceğinizi biliyor. Şimdi aradım ama tam ihtiyacım olanı bulamadım. Daha spesifik olarak, düğmelerimin, etiketlerimin, liste kutularının, sürgülerin vb. Varlığını kontrol etmem gerekiyor.Tkinter'da bir widget olup olmadığını nasıl görebilirim? bir Boole döndürür</p> <pre><code>x.winfo_exists() </code></pre> <p>:

+1

Sorunuz belirsiz. Bir pencere parçasının var olup olmadığını belirlemek için "winfo_exists" diyebileceğinizi, ancak _your_ widget'larının olup olmadığını nasıl anlayacağınızı bilmiyorsunuz diyebilirsiniz. –

+0

NO, bir pencerenin var olup olmadığını görmek için. Bu cevabı alana kadar da widget'lar için çalıştığını bilmiyordum. Bu arada teşekkürler. – madprogramer

cevap

15

winfo_exists, widget'ı yok etmediğiniz sürece 1 değerini döndürür. Bu durumda, 0 döndürür. Bu yöntem herhangi bir parçacık sınıfı üzerinde çağrılabilir. sadece Tk root veya Toplevels değil. Alternatif olarak, winfo_children bir widget tüm çocukları alabilirsiniz:

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

Çerçeve nesnesini "root" olarak döndürmediyseniz (veya doğrudan oluşturulmadığından), label.destroy() 'ı yapamazsınız, ancak hala root üzerinde arama yapabilir ve yineleyebilirsiniz. winfo_children() 'listesi. Örneğin, root.winfo_children() [0] .destroy() 'veya' root.winfo_children() [1] .destroy() 'durumunda bir Menü var. Yine de, kullandığınız her kare için tutamaçları daha kolay bir şekilde oluşturmanın yanı sıra, her bir düğmeyi/etiketi/etc'yi bir ana çerçevenin içine yerleştirmek daha kolaydır. – erm3nda

1

Ayrıca türünü yani .. tipi (etiket) yazdırabilirsiniz. Bu sadece varoluş sağlamak değil, aynı zamanda bir şey hata olmadan 'NoneType' geliyor olup olmadığını bulmak için yararlı olabilir. Bir programın olup olmadığını(), programın ne kadar yakın olduğunu sorduğunuzu veya döndürdüğünüze öğelerin döndüğünü gösteren değerli ipuçları sağlayabilecek başka bir tipiniz varsa size söyleyecektir! Object.winfo_exists() ve object.winfo_children belirlidir ve eğer nesne bir 'instance' türü değilse bir hatayla karşılaşır.

+0

[nasıl iyi cevap yazılır] (http://stackoverflow.com/help/how-to-answer) – Manish