【发布时间】:2010-11-19 17:42:10
【问题描述】:
我正在尝试从 Tkinter gui 中显示的 python 多处理进程获取输出。
我可以通过 gui 将进程的输出发送到命令 shell,例如通过在 shell 提示符下运行流畅的小脚本:
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()
我也可以将输出从 parent 发送到文本框,例如通过在 myfunc 中注释掉 stdout 的刷新来修改上述内容
# 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
但是我不知道如何将进程的输出发送到文本框。我错过了一些简单的东西吗?
【问题讨论】:
标签: python user-interface tkinter stdout multiprocessing