python - 定期更新 Tkinter 中的标签

标签 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 就会被执行。我希望标签定期使用脚本的输出进行更新,但事实并非如此。我做错了什么?

最佳答案

我猜当您运行此命令时,GUI 会变得无响应。如果是这样,那么您就阻塞了 Tkinter 的主循环。您需要在线程中运行子进程位,并使用 Tkinter 的任何线程安全方法来更新您的 GUI。我发现这篇旧文章听起来与您正在做的事情非常相似:http://effbot.org/zone/tkinter-threads.htm

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

关于python - 定期更新 Tkinter 中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11252865/

相关文章:

python - 将 Python 循环方法转换为嵌套循环

python - 将 "yield from"语句转换为 Python 2.7 代码

python - 如何在 PyTorch 中乘以矩阵?

python - 是否有 Python 库来处理 OWL?

python - 使用Remove()或Clear()后wxPython TextCtrl不聚焦

python - 如何识别字符串是否是人名?

python - tkinter 文本小部件的自适应调整大小

python - Python 中是否存在 isinstance(value, object) 不为 True 的值?

python - Tkinter 窗口稍微偏离中心

python - 在 tkinter 中,为什么 winfo_height() 总是返回 1?