Python-中止当前功能而不停止运行tkinter mainloop

时间:2018-07-16 03:50:08

标签: python python-3.x tkinter

我是Python的新手,如果有可能在以下情况下立即实现中止。

条件:2个按钮:StartAbort

当我按下Start按钮时,代码应开始执行功能,如果我按下Abort按钮,则该功能将立即停止运行,并变为初始状态(按下Start按钮之前。)

此外,我知道“ signal.CTRL_C_EVENT / CTRL_BREAK_EVENT”,但是它将关闭所有代码,包括Tkinter mainloop

1 个答案:

答案 0 :(得分:0)

这取决于您要完成的工作。

这里是在类中使用循环方法的示例。如果您有某种功能可以循环运行,则此方法有效。您只需将运行检查放到最能打破循环的位置。

import tkinter as tk


class Example(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.running = False
        tk.Button(self, text="Start", command=self.start).pack()
        tk.Button(self, text="abort", command=self.abort).pack()

    def start(self):
        self.running = True
        self.running_loop()

    def abort(self):
        self.running = False

    def running_loop(self):
        if self.running == True:
            print("running")
            self.after(100, self.running_loop)
        else:
            print("stopped")


app = Example()
app.mainloop()

如果您要执行一些更复杂的操作(例如需要运行一些复杂的查询),则可能需要使用多线程进行此操作,以使进程与Tkinter分开。原因是Tkinter是一个单线程事件驱动程序,并且本身不能多线程。因此,我们需要管理需要通过线程中止的事情。这稍微复杂一点,也许需要视情况而定,所以我需要更多地了解您要尝试执行的操作。