无法调用destroy命令

时间:2017-09-27 16:05:01

标签: python python-2.7 global-variables

我试图关闭一个网格并打开一个旧网格的名称,这样我只需使用一个功能就可以做更多次。

testgrid=a_nice_grid
def sth(button):
        if button=='filter':

            testgrid.destroy()
            global testgrid
            testgrid=app_grid.addGrid(name,data) 

使用此代码我收到以下错误:

  

文件" appJar \ appjar.py",第2724行,in      return lambda:funcName(param)    文件"",第251行,某事      testgrid.destroy()    文件" C:\ Users \ User \ Anaconda2 \ lib \ lib-tk \ Tkinter.py",第2097行,在>销毁      self.tk.call(' destroy',self._w)   TclError:无法调用" destroy"命令:应用程序已被销毁

如何以与我的代码类似的方式为变量testgrid赋予新值?

2 个答案:

答案 0 :(得分:1)

要彻底删除网格,您可以使用app.removeGrid("<grid name>")

见这里:http://appjar.info/pythonWidgetOptions/#widget-manipulation

然后,当您添加另一个网格时,它可以具有相同的名称:

def press(button):
   app.removeGrid("g")
   app.addGrid("g", [["a", "b", "c"]], 0, 0)

app = gui()
app.addGrid("g", [["a", "b", "c"]])
app.addButton("PRESS", press)
app.go()

NB。当您添加其他小部件时,您需要指定网格位置,否则它将添加到按钮下方。

答案 1 :(得分:0)

destroy()命令完全删除了小部件,无法重复使用。

您只需使用testgrid.grid_forget(),而不是添加和删除小部件。这将从用户界面中删除小部件,以后可以使用。如果您不希望使用窗口小部件,可以按如下方式运行命令:

testgrid.grid_forget()
testgrid.destroy()