Python+;Tkinter,如何在tk前端的后台独立运行?
我是个笨蛋 在后台运行一个长时间运行的进程的首选方式是什么,与tkinter弹出窗口(表单)分开 我在使用tkinter时读过关于多线程的不同内容,但找不到一个简单的“像这样做” 要明确的是,我需要的行为是,用户启动程序,tkinter位弹出表示进程已经开始。用户可以在不影响其余进程的情况下关闭此弹出窗口。也许当这个过程结束时,我可以弹出另一个tkinter弹出窗口 如果tkinter在这方面做得过火,请随意建议更好的方法Python+;Tkinter,如何在tk前端的后台独立运行?,python,multithreading,tkinter,Python,Multithreading,Tkinter,我是个笨蛋 在后台运行一个长时间运行的进程的首选方式是什么,与tkinter弹出窗口(表单)分开 我在使用tkinter时读过关于多线程的不同内容,但找不到一个简单的“像这样做” 要明确的是,我需要的行为是,用户启动程序,tkinter位弹出表示进程已经开始。用户可以在不影响其余进程的情况下关闭此弹出窗口。也许当这个过程结束时,我可以弹出另一个tkinter弹出窗口 如果tkinter在这方面做得过火,请随意建议更好的方法 谢谢 由于可以共享对象状态,因此编码更简单 class Worker:
谢谢 由于可以共享对象状态,因此编码更简单
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")
乔兰·比斯利(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")
而条件:睡眠几乎是一种反模式。条件变量的存在是有原因的,尽管在这种情况下,join也可以(在一个更大的gui程序中,您可能希望封送到gui线程)好的一点。。。。我经常等待一些状态变量,我轮询我的任务状态。。。只是等它退出就太过分了。。。我显然没有想到:P