我是tkinter noob。
在后台运行长时间运行的进程的首选方法是什么,与我的tkinter弹出窗口(表单?)分开?
我在使用tkinter时已经阅读了有关多线程的不同内容,并且找不到直截了当的“就是这样做”。
要清楚,我需要的行为是,用户启动程序,弹出tkinter位,表示进程已启动。用户可以在不影响其余进程的情况下关闭此弹出窗口。也许当这个过程结束时,我可以抛出另一个tkinter弹出窗口。
如果tkinter对此有些过分,请随时建议更好的方法。
谢谢!
答案 0 :(得分:3)
Joran Beasley有正确的答案,但过于复杂的事情。这是简单的版本:
class Worker(threading.Thread):
def run(self):
# long process goes here
w = Worker()
w.start()
tkMessageBox.showinfo("Work Started", "OK started working")
w.join()
tkMessageBox.showinfo("Work Complete", "OK Done")
编辑:这是一个有效的例子:
import threading
import time
import tkMessageBox
import Tkinter as tk
root = tk.Tk()
root.withdraw()
class Worker(threading.Thread):
def run(self):
# long process goes here
time.sleep(10)
w = Worker()
w.start()
tkMessageBox.showinfo("Work Started", "OK started working")
root.update()
w.join()
tkMessageBox.showinfo("Work Complete", "OK Done")
答案 1 :(得分:1)
由于您可以共享对象状态
,因此更简单class Worker:
finished = False
def do_work(self):
os.system("...")
self.finished=True
def start(self):
self.th = threading.Thread(target=self.do_work)
self.th.start()
w = Worker()
w.start()
tkMessageBox.showinfo("Work Started", "OK started working")
while not w.finished:
time.sleep(0.5)
tkMessageBox.showinfo("Work Complete", "OK Done")