我设法通过调用函数来显示一个小部件,然后使用destroy方法使其消失。
不幸的是,我设法做到这一点的唯一方法是将对象设为全局,我理解这是一种糟糕的做事方式。我已经多次尝试在不使用全局的情况下销毁对象,但没有一个能够工作。
以下是相关代码:
def hayHijos():
print("ii")
z=var9.get()
if z==1:
var10 = StringVar()
global numHijosMat
numHijosMat=OptionMenu(app,var10,1,2,3,4,5,6,7,8,9,10)
numHijosMat.grid(column=2)
elif z==0:
print("aa")
numHijosMat.destroy()
var9 = IntVar()
hijosEntrePartes = Checkbutton(app, text="Hijos entre las partes", variable=var9, command=hayHijos)
hijosEntrePartes.var=var9
hijosEntrePartes.grid()
答案 0 :(得分:0)
两种一般可能性。
您返回并将小部件传递给您的函数。
这不是非常适合回调,而是一般方法
def function(var, widget=None):
""" Widget is an optional argument. If not passed, it is initialized with None """
if var.get()==1:
# some code to create your widget
# make sure to use 'widget = ...' to create it
# to have the reference for your return
# call at the end of the function
else:
# some code to destroy your widget
# e.g. widget.destroy()
return widget
使用此代码可以轻松使用窗口小部件,而不会使其全局化。另一个变量用于代码中的全局行为。 “var9”。你也应该通过这个。
您可能需要使用lambda
调整回调来传递两者。
更推荐的是这里的类方法,因为lambda通常缺乏代码的可读性和代码的可重用性。 (可以称之为“坏习惯”,但恕我直言,这受用例的影响很大)
如果您想重复使用小部件,并且只想使用Checkbutton建议使其显示/消失,我宁愿推荐grid_remove method而不是widget.destroy方法 < / p>