【发布时间】:2018-04-11 12:55:35
【问题描述】:
嗨 Python 和 Tkinter 大师, 我正在尝试构建一个具有两个按钮的简单 GUI。单击 Button 时,将启动一个线程来执行某些工作。这项工作通常需要 10s/15s。而且 GUI 也可以正常工作。
但我想实现一个弹出窗口来通知哪个线程已经完成。我已经检查了t.isAlive()函数,但无法实现它,因为我不知道如何在主循环中触发基于isAlive的事件。
这是我的示例代码
from threading import Thread
from time import sleep
import Tkinter
import ttk
class SmallGui:
def __init__(self, master):
self.master = master
self.master.title('test gui')
self.button_1 = ttk.Button(self.master,
text='Start 1',
command=lambda: self.init_thread(1))
self.button_2 = ttk.Button(self.master,
text='Start 2',
command=lambda: self.init_thread(2))
self.button_1.pack()
self.button_2.pack()
def init_thread(self, work):
if work == 1:
t = Thread(target=self.work_1)
t.start()
else:
t = Thread(target=self.work_2)
t.start()
@staticmethod
def work_1():
print 'Work 1 started'
# Do some Task and return a list
sleep(10)
@staticmethod
def work_2():
print 'Work 2 Started'
# Do some Task and return a list
sleep(15)
if __name__ == '__main__':
root = Tkinter.Tk()
run_gui = SmallGui(root)
root.mainloop()
【问题讨论】:
-
为什么不在线程中正在运行的函数的最后一行添加弹出消息。您可以在此处使用来自 tkinter 的消息框。
标签: python multithreading tkinter