Python-在不停止运行tkinter-mainloop的情况下中止当前函数



我是Python的新手,如果可以像下面的情况一样立即实现中止。

条件:2个按钮:Start&Abort

当我按下Start按钮时,代码应该开始执行某个功能,如果我按下Abort按钮,无论它执行了什么,该功能都会立即停止,并变为初始状态(在按下Start按钮之前(。

此外,我知道"signal.TRL_C_EVENT/CTRL_BREAK_EVENT",但它会关闭包括Tkinter mainloop在内的所有代码。

这取决于您想要完成的任务。

下面是一个在类中使用循环方法的示例。如果您有某种函数要在循环中运行,那么这是有效的。你只需要检查一下在最有效地打破循环的地方运行。

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是一个单线程事件驱动的程序,它本身不能是多线程的。因此,我们需要管理那些需要通过线程中止的事情。这有点复杂,可能需要根据具体情况,所以我需要了解更多关于你试图做什么的信息

最新更新