我想從python多進程輸出獲取輸出顯示在Tkinter GUI中。如何發送python多進程輸出到Tkinter gui
我可以通過在殼提示符下運行fllowing微小腳本經由GUI發送從過程輸出的命令外殼,例如:
from multiprocessing import Process
import sys
def myfunc(text):
print text
sys.stdout.flush()
def f1():
p1 = Process(target = myfunc, args = ("Surprise",))
p1.start()
def f2():
p2 = Process(target = myfunc, args = ("Fear",))
p2.start()
def fp():
myfunc("... and an almost fanatical devotion to the Pope")
a = Tk()
b1 = Button(a, text="Process 1", command=f1)
b1.grid(row=0, column=0, pady=10, padx=10, sticky=SE)
b2 = Button(a, text="Process 2", command=f2)
b2.grid(row=0, column=1, pady=10, padx=10, sticky=SE)
b3 = Button(a, text="Parent", command=fp)
b3.grid(row=0, column=2, pady=10, padx=10, sticky=SE)
if __name__ == "__main__":
a.mainloop()
我還可以發送輸出從父到文本框,例如通過註釋掉標準輸出的沖洗中MYFUNC
# sys.stdout.flush()
和後立即加入「b3.grid ......」修改上述行:
class STDText(Text):
def __init__(self, parent, cnf={}, **kw):
Text.__init__(self, parent, cnf, **kw)
def write(self, stuff):
self.config(state=NORMAL)
self.insert(END, stuff)
self.yview_pickplace("end")
self.config(state=DISABLED)
messages = STDText(a, height=2.5, width=30, bg="light cyan", state=DISABLED)
messages.grid(row=1, column=0, columnspan=3)
sys.stdout = messages
但是我不知道如何將輸出從進程發送到文本框。我錯過了一些簡單的東西嗎
Unutbu - 感謝非常有幫助的答案。它當然可以解決我玩具的例子。 (在實際的應用程序中,這些進程將運行不同的函數並自動生成輸出消息(即不會打印某些給定的文本作爲參數)。我想知道是否有可能找到一個'cheapo'來避免進入管道,但我想這可能是要走的路線 – tchaz 2010-11-20 15:22:34