定期更新Tkinter中的标签

时间:2012-06-28 21:04:12

标签: python tkinter python-2.x

我已经阅读了这个问题的许多解决方案,但我仍然无法使这个简单的程序工作。我知道这可能很简单,但我找不到我错过的东西。

我有这个简单的程序:

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()

所以当我点击按钮时,会执行some_script。我希望标签定期更新脚本的输出,但事实并非如此。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我猜你运行它时GUI变得没有响应。如果是这样,那么你就阻止了Tkinter的主循环。您需要在Thread中运行子进程位,并使用Tkinter的线程安全方法来更新GUI。我发现这篇旧文章与你正在做的非常相似:http://effbot.org/zone/tkinter-threads.htm

还有这个方便的食谱:http://code.activestate.com/recipes/82965-threads-tkinter-and-asynchronous-io/