2013-03-09 91 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

相关问题