首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python回显终端输出--无缓冲

Python回显终端输出--无缓冲
EN

Stack Overflow用户
提问于 2020-09-28 23:08:05
回答 2查看 27关注 0票数 0

我在试着做一个图形用户界面。该程序在设备上启用VNC。所以当我按下GO按钮时,它会以"Enabling VNC...“开始。需要几秒钟才能启用。之后是在完成时的"sucCess“消息。我在航站楼看到了这个。

我正试着在GUI上做同样的事情。直到最后才出现"enabling vnc“消息。它与“成功”消息一起出现。这就像它将所有的GUI输出消息一起缓冲在一起,然后在最后把它们都吐出来。

这就是我所拥有的:

代码语言:javascript
复制
def actions():
# Enable VNC
if action_VNC.get():
    print("Enabling VNC...")
    msg_initVNC = "Enabling VNC..." + "\n"
    outText.insert(tk.END, msg_initVNC)

#DO STUFF HERE

    print('Success. VNC enabled.')
    print('########')
    msg_outVNC = 'Success.  VNC enabled.' + "\n" + '########' +"\n"
    outText.insert(tk.END, msg_outVNC)

window.mainloop()

这里的#DO内容启用了VNC,并且它可以工作。这大约需要3 -5秒的时间.我希望程序在应该的时候将打印文本输出到我的GUI,而不是等到最后才一起输出所有内容。它已经在终端上做到了这一点。有什么想法?

EN

回答 2

Stack Overflow用户

发布于 2020-09-28 23:47:01

它有点缓冲了。GUI通过“事件驱动”编程来工作,这意味着在函数完成之前,可见窗口不会更新。这意味着您不能在GUI中创建需要很长时间才能完成的函数。

解决这个问题的一种方法是使用threading模块。

代码语言:javascript
复制
from threading import Thread

def actions():
    # Enable VNC
    if action_VNC.get():
        print("Enabling VNC...")
        msg_initVNC = "Enabling VNC..." + "\n"
        outText.insert(tk.END, msg_initVNC)
        t = Thread(target=do_stuff, daemon=True)
        t.start() # start the worker function in the background
        
        root.bind("<<TaskDone>>", task_done) # listen for the task done event
        
def do_stuff():
    #DO STUFF HERE
    root.event_generate("<<TaskDone>>") # send the task done event

def task_done(*args):
    print('Success. VNC enabled.')
    print('########')
    msg_outVNC = 'Success.  VNC enabled.' + "\n" + '########' +"\n"
    outText.insert(tk.END, msg_outVNC)

window.mainloop()
票数 0
EN

Stack Overflow用户

发布于 2020-09-29 20:50:17

我发现window.update_idletasks()对我来说工作得很好。因此,我的输出代码如下所示:

代码语言:javascript
复制
    outText.insert(tk.END, msg_seconds)
    window.update_idletasks()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64104836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档