2013-03-09 214 views
6

,我知道,你可以檢查是否存在由一個窗口:如何查看Tkinter中是否存在小部件?現在

x.winfo_exists() 

返回boolean。現在我已經搜索,但一直沒能找到我需要的東西。更具體地說,我需要檢查我的按鈕,標籤,列表框,滑塊等的存在。

+1

你的問題不清楚。你說你知道你可以調用'winfo_exists'來確定一個小部件是否存在,但是你不知道如何判斷_your_小部件是否存在? – 2013-03-09 17:43:01

+0

否,查看是否存在窗口。我不知道它也適用於小部件,直到我得到這個答案。謝謝你的方式。 – madprogramer 2013-03-10 06:09:47

回答

15

winfo_exists返回1,除非你銷燬了這個小部件,在這種情況下它返回0.這個方法可以在任何小部件類上調用,不僅是Tk根或Toplevels。或者,你可以得到一個小部件的所有兒童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

如果您沒有將框架對象返回到「根」(或者直接不是從它創建的),您將無法執行'label.destroy()',但是您仍然可以搜索並遍歷根目錄。 winfo_children()'列表。例如,如果你在頂部有一個菜單,'root.winfo_children()[0] .destroy()'或'root.winfo_children()[1] .destroy()'。無論如何,爲您使用的每個框架創建手柄更容易,並且在主框架內插入每個按鈕/標籤/等等。 – erm3nda 2015-11-08 20:11:17

1

您還可以打印類型即..類型(標籤)。這可以有助於提供不僅存在,而且還可以發現是否有任何內容'沒有類型'沒有錯誤。類型()會告訴你,如果你有一個實例或其他類型,可以提供有價值的線索,說明程序執行的程度如何,或者將項目返回到你認爲你所要求的內容。 object.winfo_exists()和object.winfo_children是特定的,並且如果對象不是類型'實例',將會發生錯誤。

+0

[如何寫出一個很好的答案](http://stackoverflow.com/help/how-to-answer) – Manish 2016-11-27 14:54:37

相關問題