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

问题描述 投票:0回答:2

我已经在类中看到了self.destroy()的一些用法,但无法使其与我想要的功能配合使用。

我有resultsPage类,显示了在另一页上获得的结果。我已经制作了displayResults(pageNo)函数,以便在resultsPage可见时显示它们。问题是出现在结果页面之间的后退和下一步按钮。所有小部件都在彼此之上创建,但是我想将其全部删除,然后创建新的。我添加了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"

如果有帮助,我可以发布完整的代码,但是我认为应该将其概括化,这样对其他人会更有帮助。

python oop tkinter destroy
2个回答
0
投票

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


0
投票

如所指出,在这种情况下使用self.destroy()将不起作用。为了达到删除框架上所有小部件的目的,可以使用循环(贷记到@stovfl):

for widget in self.grid_slaves():
    widget.destroy()
© www.soinside.com 2019 - 2024. All rights reserved.