如何在函数和类tkinter中使用destroy?

2024-09-26 17:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在类中看到了self.destroy()的一些用法,但是我不能让它按我想要的那样工作

我有一个类resultsPage,它显示在另一个页面上获得的结果。我制作了displayResults(pageNo)函数,当resultsPage可见时显示这些。问题出现在back和next按钮上,这两个按钮用于在结果页面之间切换。所有的小部件都是在彼此的上面创建的,但是我想删除它们,然后创建新的小部件。我添加了self.destroy()来尝试修复这个问题,但是没有成功

我不确定这是否与我定义函数的位置有关,但我对它们的定义位置做了一番尝试,但没有改变错误消息

这是我的代码的简化示例:

class resultsPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

    def onShowFrame(self, event):
        def displayResults(pageNo):
            self.destroy()
            #Create widgets related to pageNo
            #Create back and next buttons e.g.
            back = tk.Button(self, text="<=",
                                 command=lambda: displayResults(pageNo - 1))
        displayResults(1)

我得到的错误是:_tkinter.TclError: bad window path name ".!frame.!previewresultspage"

如果有帮助的话,我可以发布我的完整代码,但我想我应该推广一下,这样对其他人更有帮助


Tags: 函数self定义部件def错误back页面
2条回答

如前所述,在这种情况下使用self.destroy()将不起作用。要实现删除框架上所有小部件的目标,可以使用循环(归功于@stovfl):

for widget in self.grid_slaves():
    widget.destroy()

您正在删除onShowFrame中的小部件,然后立即尝试创建一个新的小部件,将其作为父级。不能将已删除的小部件用作另一个小部件的父级

相关问题 更多 >

    热门问题