例如:
import threading
import time
import Tkinter
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print "Step Two"
time.sleep(20)
class MyApp(Tkinter.Tk):
def __init__(self):
Tkinter.Tk.__init__(self)
self.my_widgets()
def my_widgets(self):
self.grid()
self.my_button = Tkinter.Button(self, text="Start my function",
command=self.my_function)
self.my_button.grid(row=0, column=0)
def my_function(self):
print "Step One"
mt = MyThread()
mt.start()
while mt.isAlive():
self.update()
print "Step Three"
print "end"
def main():
my_app = MyApp()
my_app.mainloop()
if __name__ == "__main__":
main()
好吧,如果我开始我的例子它按预期工作。我点击一个按钮,my_function启动,GUI响应。但我已经读过我应该避免使用update()。那么,如果有人可以解释为什么以及如何正确等待线程,那将会很好?第二步是一个线程,因为它比第一步和第三步花费更长的时间,否则会阻止GUI。
我是Python的新手,我正在尝试编写我的第一个“程序”。也许我正在以错误的方式思考,因为我不是很有经验......
此致 大卫。
答案 0 :(得分:2)
你需要记住你有一个事件循环在运行,所以你需要做的就是每次事件循环进行迭代时检查线程。好吧,不是每个时间,而是定期。
例如:
def check_thread(self):
# Still alive? Check again in half a second
if self.mt.isAlive():
self.after(500, self.check_thread)
else:
print "Step Three"
def my_function(self):
self.mt = MyThread()
self.mt.start()
self.check_thread()