Python 如何控制Tk对象/窗口中是否存在组件?

Python 如何控制Tk对象/窗口中是否存在组件?,python,python-3.x,tkinter,python-3.4,Python,Python 3.x,Tkinter,Python 3.4,我想知道控制Tk对象/窗口上是否已经存在某个组件(标签、按钮或条目)的最有效方法是什么 我在网上搜索了一段时间,唯一发现的是: 如果component.winfo_存在():#但这对我不起作用(我使用的是Python 3.4) 我也尝试过这样的东西(愚蠢,当然标签不是布尔值): 如果不是self.label: self.label=标签(self,text=“label”) 我还试图发明一些更聪明的东西,比如: 如果不是self.label.exists(): self.label=标签(sel

我想知道控制Tk对象/窗口上是否已经存在某个组件(标签、按钮或条目)的最有效方法是什么

我在网上搜索了一段时间,唯一发现的是:

如果component.winfo_存在():#但这对我不起作用(我使用的是Python 3.4)

我也尝试过这样的东西(愚蠢,当然标签不是布尔值):

如果不是self.label:
self.label=标签(self,text=“label”)

我还试图发明一些更聪明的东西,比如:

如果不是self.label.exists():
self.label=标签(self,text=“label”)

由于我是一个使用tkinter的noob,我可能错过了一些东西

编辑

这是全班同学:

课程表(Tk):


我认为你的第二种方法已经足够好了

self.label = None  # Initialize `self.label` as None somewhere.

...

if not self.label: 
    self.label = Label(self, text="Label")
这将起作用,因为在创建标签之前,
self.label
在用作谓词时计算为false(
bool(None)为false
),一旦设置标签,将计算为真值


更新

下面的行不是您想要的,因为
pack
不返回任何内容

self.label = Label().pack(side=LEFT) # pack return nothing -> None
self.label
在语句后变为
None

应将标签创建和包装分开:

self.label = Label()
self.label.pack(side=LEFT)

<>一个小部件直到创建它才被创建,所以考虑使用这个来检查它是否存在:

try:
    self.label
except NameError:
    self.label = Label()
或之前对其进行初始化:

self.label = None
# ...
if self.label is None:
    self.label = Label()

我曾尝试在构造函数中将self.label初始化为None,但当我单击调用函数创建self.label的按钮时,创建了许多标签…@bad_alloc,能否显示揭示问题的最小代码。
self.label = None
# ...
if self.label is None:
    self.label = Label()