Неожиданное поведение виджета текста в цикле - PullRequest
0 голосов
/ 16 ноября 2011

Пожалуйста, обратитесь к приведенному ниже коду: я могу напечатать два оператора печати (на # 1 и # 2) в режиме реального времени (построчно).Однако текстовый виджет появляется только после выполнения сценария csh подпроцесса.

Когда я могу распечатать значения, полученные из стандартного вывода подпроцесса, почему он не отображается в текстовом виджете?

#!/tools//python/2.7.2/bin/python -u

import os
import ttk 
from Tkinter import *
import subprocess
import sys

t = Tk()      
t.title('New title')
t.geometry('800x1000-5+40')
t.state('normal')
little = Label(t, text="OUTPUT LOG").grid(column = 0, row = 0)
log = Text(t, state='normal', width=115, height=150, wrap='none')
log.grid(row = 1, column = 0)

test=subprocess.Popen("tem",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#tem is a csh file which print number from 1 to 1000

#stdout
cnt = 0.0
while True:
    line = test.stdout.readline()
        cnt += 1
        if line == "":
            break
        else:   
        log['state'] = 'normal'
        log.insert(cnt,line)
                print 'line #' #1
                print line     #2
log['state'] = 'disabled'

t.mainloop()

1 Ответ

0 голосов
/ 17 ноября 2011

Проблема в том, что для обновления дисплея должны обрабатываться события . Это имеет основополагающее значение для работы Tk (и, следовательно, Tkinter). Самый простой метод в Python - это, вероятно, поместить чтение из подпроцесса в его собственный поток, который затем отправляет каждую строку сообщения в основной поток GUI для отображения.

...