我希望有人能在这里帮助我。我正在建立一个tkinter gui的问题。这个问题只发生在Windows中。我的GUI创建了一个结果框,其中包含一些标签,当计算其他内容时,用户点击“newPort”按钮,该按钮应该删除结果框并设置为False
一些实例属性内部的计算。我遇到的问题,仅在Windows中才会显现,有时结果frame
及其后代labels
不会每次都消失。有时他们这样做,有时他们没有。实例变量已正确设置为False
,但小部件仍在主GUI上可见。 GUI还包含一对checkboxes
和radiobuttons
,但它们不会影响结果框架的创建,也不会影响其预期的破坏。在点击newPort
按钮导致frame
和labels
不被破坏之前,我无法确定用户采取的操作模式。当我用py2exe冻结我的应用程序,以及从eclipse IDE中的python解释器运行应用程序时,会发生这种情况。我没有尝试直接从python解释器运行应用程序(即没有IDE),当我使用eclipse python解释器运行应用程序时,我的Mac上不会发生这个问题。非常感谢!我的代码如下所示:
import Tkinter as TK
class widget(object):
def __init__(self,parent=None):
self.parent = TK.Frame(parent)
self.parent.grid()
self.frame = TK.Frame(self.parent)
self.frame.grid()
newLedger = TK.Button(self.parent,command=self.newPort).grid()
self.calcButton = TK.Button(self.frame,command=self.showResults)
self.calcButton.grid()
self.calcVariable = True
def newPort(self):
self.calcVariable = False
try:
self.second.grid_forget()
self.first.grid_forget()
self.resultsFrame.grid_forget()
self.second.destroy()
self.first.destroy()
self.resultsFrame.destroy()
except:
raise
self.frame.update_idletasks()
def showResults(self):
self.resultsFrame = TK.Frame(self.frame)
self.resultsFrame.grid()
self.first = TK.Label(self.resultsFrame,text='first')
self.first.grid()
self.second = TK.Label(self.resultsFrame,text='second')
self.second.grid()
if __name__ == '__main__':
root = TK.Tk()
obj = widget(root)
root.mainloop()
答案 0 :(得分:1)
您不需要在标签上销毁或致电grid_forget
,也不需要在resultsFrame上调用grid_forget
;当你破坏resultsFrame时,它将导致所有关闭它的子节点,并且当这些小部件被销毁时,它们将不再由网格管理。
我可以让小部件不被破坏的唯一方法是点击" calc"按钮连续两次而不点击"新"中间的按钮。我是通过从命令行运行程序来做到这一点的。