使用类时如何停止 Tkinter 程序

问题描述

我正在使用 python 创建一个控制 Tkinter 窗口的类对象。我的代码如下所示:

class MyGui:
    
    def __init__(self):
        
        self.root = tk.Tk()
        self.root.title("My Gui")
        
        return
    
    def makeButton(self,text,on_click_function,should_pack = True):
        """ Makes a button widget """
        
        button = tk.Button(self.root,text=text,command=on_click_function)
    
        if should_pack:
            button.pack()
    
        return button
    
    def start(self):
        
        self.root.mainloop()
        
    def stop(self):
        
        self.root.destroy()
        

我希望能够启动类的一个实例,然后像这样停止它:

a = MyGui()
a.makeButton('STOP',a.stop)
a.start()
... // OTHER CODE HERE EVENTUALLY // ...

一切正常,窗口在 start() 上成功创建,当点击按钮并执行 stop() 时它消失。问题是主循环继续运行。我必须使用 Ctrl+C 手动终止程序,它显示它在 self.tk.mainloop(n) 处被终止。

如果我只是在一个普通文件而不是一个类中执行我的所有 tkinter 代码,一切都一样,但是当我在 root 上调用 destroy 时主循环也会停止,并且程序结束。然而,如果我把它放在一个类中,尽管窗口被破坏,mainloop 也不会停止。

为什么?我怎样才能让它停止主循环? (我可以通过调用 sys.exit 来停止整个程序,但我想在通过按下按钮调用 stop 后继续执行非 Gui 的东西)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)