Tkinter中grid_forget的问题 - Python

-1 投票
1 回答
10609 浏览
提问于 2025-04-16 20:48

基本上,我发现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,但结果还是只留下了我互动过的控件,比如textEntryIndivOpenButtonIndiv,其他的控件都消失了,正如预期的那样。

如果有人对此有任何想法,我将非常感激能得到一些帮助。如果需要,我可以提供更多代码,但因为代码量很大,所以我没有把全部放在这里。

编辑/更新:

没关系。似乎问题自己解决了,我实际上没有做任何改变——字面意思上,它在我没有修改代码的情况下就正常工作了。现在我觉得发这个帖子有点多余。唉。

1 个回答

6

grid_forget 是一个方法。当你写 self.textEntryIndiv.grid_forget 时,其实你并不是在执行这个方法,而只是获取了它的一个引用。你需要像这样调用它:self.textEntryIndiv.grid_forget()(注意后面有个 ())。

撰写回答