当单击某些按钮时,我正在使用 tkinter 制作一个具有多个窗口的大型 HMI。
我发现当我尝试关闭第二个窗口(Tk 主窗口的 TopLevel)时,它的实例永远不会关闭。 :(
这是一个很好地代表我的问题的**示例**。 (这不是我的真实代码,我的真实代码做其他事情)。
import tkinter as tk
global secondWindow
class SecondWindow(tk.Toplevel):
def __init__(self):
super().__init__()
self.geometry("250x250")
self.title('second window')
lab = tk.Label(self, text="exemple")
lab.pack()
self.protocol("WM_DELETE_WINDOW", self.onclosing)
def onclosing(*args) :
global secondWindow
#do other stuff and
secondWindow.destroy()
class MainWindow(tk.Tk) :
def __init__(self):
super().__init__()
global secondWindow
self.title('exemple')
self.geometry('250x250')
secondWindow = None
self.button = tk.Button(self, text="create a new instance of Toplevel", command=self.button_clicked)
self.button.pack()
self.isIns()
def button_clicked(self, *args) :
global secondWindow
secondWindow = SecondWindow()
def isIns(self, *args) :
global secondWindow
print(isinstance(secondWindow, SecondWindow))
self.after(500, self.isIns)
if __name__ == "__main__":
app = MainWindow()
app.mainloop()
如果您尝试运行此代码,单击按钮创建 TopLevel 实例,然后单击第二个窗口上的叉号,该实例仍然处于“up”状态
我想当我关闭第二个窗口时,实例被销毁(输出应该是:False,False...True,True...然后再次False)。
如果有人有同样的问题,只需修改“onClosin”函数即可:
def onclosing(*args) :
global secondWindow
#do other stuff and
secondWindow.destroy()
secondWindow = None
非常感谢@jasonharper 帮助我!