2

私はすでにこの問題の解決策の多くを読み通しましたが、それでもこの単純なプログラムを機能させることはできません。おそらく本当に簡単なことは知っていますが、何が欠けているのかわかりません。

私はこの簡単なプログラムを持っています:

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が実行されます。スクリプトの出力でラベルを定期的に更新したいのですが、更新されません。私は何が間違っているのですか?

4

1 に答える 1

2

これを実行するとGUIが応答しなくなると思います。もしそうなら、あなたはTkinterのメインループをブロックしています。スレッドでサブプロセスビットを実行し、Tkinterのスレッドセーフメソッドを使用してGUIを更新する必要があります。私はあなたがしていることに非常に似ているように聞こえるこの古い記事を見つけました:http://effbot.org/zone/tkinter-threads.htm

この便利なレシピもあります:http://code.activestate.com/recipes/82965-threads-tkinter-and-asynchronous-io/

于 2012-06-28T21:46:17.767 に答える