Tkinter中grid_forget的问题 - Python
基本上,我发现Tkinter里的grid_forget()方法在我的程序中只对某些控件有效,而对其他控件却不行。我希望在按下“重启”按钮时,屏幕能清空,然后重新显示起始的控件,就像用户关闭再重新打开程序一样。
可惜的是,当我按下按钮时,有些控件消失了,有些却没有。我对所有控件都使用了grid_forget()方法,所以我不太明白问题出在哪里。看起来那些仍然可见的控件是我在程序运行时与之互动过的,比如一个输入框和一个按钮。我在网上找不到相关的文档来说明这个问题,所以我想寻求帮助。
我的代码(至少是“重启”按钮的部分)如下:
def RetryButtonClick(self):
"""Note to self: this needs to be fixed"""
self.labelvar.set("")
self.textvar1.set("")
self.textvar2.set("")
self.LabelIndiv.config(state=NORMAL)
self.LabelIndiv.grid_forget
self.textEntryIndiv.config(text="", state=NORMAL)
self.textEntryIndiv.grid_forget
self.FirstEntry.config(state=NORMAL)
self.FirstEntry.grid_forget
self.LastLabelB.config(state=NORMAL)
self.LastLabelB.grid_forget
self.ImportAll.config(state=NORMAL)
self.ImportAll.grid_forget
self.OpenButtonIndiv.config(state=NORMAL)
self.OpenButtonIndiv.grid_forget
self.OpenButtonBatch.config(state=NORMAL)
self.OpenButtonBatch.grid_forget
self.RetryButton.grid_forget
self.Label3.config(text="")
self.Label5.config(text="")
#self.master.grid_forget()
self.startwindow()
self.startwindow()是定义控件及其在屏幕上位置的函数,这部分似乎运行得很好。我相信问题出在这里,但我不知道具体是什么。我尝试把控件的状态改为正常,因为之前的一个函数把它们禁用了,但这似乎没有效果。我还尝试在主框架self.master
上使用grid_forget,但结果还是只留下了我互动过的控件,比如textEntryIndiv
和OpenButtonIndiv
,其他的控件都消失了,正如预期的那样。
如果有人对此有任何想法,我将非常感激能得到一些帮助。如果需要,我可以提供更多代码,但因为代码量很大,所以我没有把全部放在这里。
编辑/更新:
没关系。似乎问题自己解决了,我实际上没有做任何改变——字面意思上,它在我没有修改代码的情况下就正常工作了。现在我觉得发这个帖子有点多余。唉。
1 个回答
6
grid_forget
是一个方法。当你写 self.textEntryIndiv.grid_forget
时,其实你并不是在执行这个方法,而只是获取了它的一个引用。你需要像这样调用它:self.textEntryIndiv.grid_forget()
(注意后面有个 ()
)。