如何查看 Tkinter 中是不是存在小部件?

Posted

技术标签:

【中文标题】如何查看 Tkinter 中是不是存在小部件?【英文标题】:How to see if a widget exists in Tkinter?如何查看 Tkinter 中是否存在小部件? 【发布时间】:2013-02-25 01:01:08 【问题描述】:

现在,我知道您可以通过以下方式检查窗口是否存在:

x.winfo_exists()

返回一个布尔值。我已经搜索过这个,但无法找到我正在寻找的确切内容。更具体地说,我需要检查我的按钮、标签、列表框、滑块等是否存在。

【问题讨论】:

您的问题不清楚。你说你知道你可以调用winfo_exists来确定一个小部件是否存在,但你不知道如何判断你的小部件是否存在? NO,查看是否存在窗口。在我得到这个答案之前,我不知道它也适用于小部件。顺便谢谢。 【参考方案1】:

winfo_exists 返回 1,除非您已销毁小部件,在这种情况下它返回 0。可以在任何小部件类上调用此方法,不仅是 Tk 根或 Toplevel。或者,您可以使用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()
[]

【讨论】:

如果您没有将框架对象返回给“root”(或直接没有从它创建),您将无法执行label.destroy(),但您仍然可以搜索和迭代root.winfo_children() 列表。例如,root.winfo_children()[0].destroy()root.winfo_children()[1].destroy(),以防您在顶部有菜单。无论如何,为您使用的每个框架创建句柄会更容易,并且在主框架中插入每个按钮/标签/等。【参考方案2】:

您还可以打印类型,即类型(标签)。这不仅有助于提供存在,而且还有助于查找是否出现“NoneType”而没有错误。 type() 将告诉您是否有一个实例或其他类型,它们可以提供有价值的线索,说明程序执行的接近程度或将项目返回到您认为您所要求的程度! object.winfo_exists() 和 object.winfo_children 是特定的,如果对象不是“实例”类型,则会抛出错误。

【讨论】:

how to write a good answer

以上是关于如何查看 Tkinter 中是不是存在小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在循环中创建多个具有不同名称的 tkinter 小部件?

如何从锚点旋转 tkinter 画布小部件?

如何在 tkinter 中找出当前小部件的大小?

如何在 tkinter Text 小部件中突出显示文本

如何在tkinter中找出当前的小部件大小?

如何在粘性框架中居中 tkinter 小部件