即使在 .destroy() 时,TopLevel 实例也从未关闭?

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

当单击某些按钮时,我正在使用 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)。

python tkinter instance
1个回答
0
投票

如果有人有同样的问题,只需修改“onClosin”函数即可:

def onclosing(*args) :
    global secondWindow
    #do other stuff and 
    secondWindow.destroy()
    secondWindow = None

非常感谢@jasonharper 帮助我!

© www.soinside.com 2019 - 2024. All rights reserved.