Я пытаюсь получить вывод из многопроцессорного процесса python, отображаемого в графическом интерфейсе Tkinter.
Я могу отправить вывод из процессов через графический интерфейс в командную оболочку, например, запустив крошечный скрипт в приглашении оболочки:
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()
Я также могу отправить вывод из родителя в текстовое поле, например, с помощью изменив приведенное выше, закомментировав сброс stdout в 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
Однако я могу ' t выяснить, как отправить вывод из процессов в текстовое поле. Я что-то упустил?