我已经在类中看到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"
如果有帮助,我可以发布完整的代码,但我想将其概括化,这样对其他人更有帮助。
答案 0 :(得分:0)
您要删除onShowFrame
中的小部件,然后立即尝试以其为父级创建一个新的小部件。您不能将已删除的小部件用作另一个小部件的父级。
答案 1 :(得分:0)
如前所述,在这种情况下使用self.destroy()
将不起作用。为了达到删除框架上所有小部件的目的,您可以使用循环(记入@stovfl):
for widget in self.grid_slaves():
widget.destroy()