如何在窗口中实时更新打印文本?

时间:2019-08-07 09:29:10

标签: python-3.x pysimplegui

我正在使用Pysimplegui在执行事件后在for循环中输出一些文本。但是,当for循环结束时,我只能一次看到所有文本。当for循环运行时,我看不到它。 gui显示“无响应”(但它正在运行)。关于如何解决此问题的任何想法?

这似乎发生在我有一个for循环,并且在for循环中,事件运行需要时间才能执行。下面是我的代码。

import PySimpleGUI as sg
import time

def excecutetest(command):
        for i in range(5):
            print (command + str(i))
            time.sleep(2)

layout = [      
    [sg.Text('Information:', size=(40, 1))],      
    [sg.Output(size=(88, 20))],      
    [sg.Text('Input:', size=(15, 1)), sg.InputText(focus=True), sg.Button('Run', bind_return_key=True)],
    [sg.Button('EXIT')]      
        ] 

window = sg.Window('testing', layout)      

# ---===--- Loop taking in user input and using it to call scripts --- #      

while True:      
  (event, value) = window.Read()      
  if event == 'EXIT'  or event is None:      
      break # exit button clicked      
  if event == 'Run':      
      excecutetest(value[0])
window.Close()

我希望该窗口实时输出每个for循环。 谢谢。

1 个答案:

答案 0 :(得分:1)

如果您希望在下一次致电Window.Refresh()之前显示某些内容,则需要向Window.Read()添加呼叫。在文档和许多演示程序中都有讨论。

我知道这是测试代码,但是不建议您将睡眠状态放入事件循环中。