我已经阅读了许多关于这个问题的解决方案,但是我仍然不能让这个简单的程序工作。我知道这可能很简单,但我找不到我遗漏了什么。
我有一个简单的程序:
from Tkinter import *
import subprocess
def run():
process=subprocess.Popen(some_script, shell=True, stdout=subprocess.PIPE)
while True:
nextline = process.stdout.readline()
if not nextline:
break
output.set(nextline)
root.update_idletasks()
root = Tk()
output = StringVar()
label1 = Label(root, textvariable=output)
label1.pack()
button1 = Button(root, text="Go", command=run)
button1.pack()
root.mainloop()
所以当我点击按钮时,会执行一些脚本。我想用脚本的输出定期更新标签,但没有。我做错什么了?
我猜当你运行这个时,GUI会变得没有响应。如果是的话,那你就挡住了Tkinter的主回路。您需要在线程中运行子进程位,并使用Tkinter的线程安全方法来更新您的图形用户界面。我发现这篇老文章听起来和你所做的非常相似:http://effbot.org/zone/tkinter-threads.htm
还有一个方便的食谱:http://code.activestate.com/recipes/82965-threads-tkinter-and-asynchronous-io/
相关问题 更多 >
编程相关推荐