【问题标题】:Python Curses Refreshing Text With a LoopPython 诅咒用循环刷新文本
【发布时间】:2019-01-28 20:39:55
【问题描述】:

我正在通过 Linux Mint 的 Xfce 终端 ssh(也尝试过 ssh -t)连接到运行 Rasperian Stretch 的 Raspberry Pi。在 Pi 上,我有一个 Python-Curses 示例,我对其进行了修改,试图让当前时间每隔几秒“就地”更新一次,而不是自己编写。但它最初只打印一次时间,然后从不打印更新的时间。但是,如果我在笔记本电脑上手动按“Enter”键,时间会更新,如果我快速按“Enter”多次“进入”叠加,并且时间显示更新的次数与我按 Enter 的次数一样多。在这种情况下,我可能对 Curses 和终端或 Python 不了解一些基本的东西。欣赏它。代码如下:

import curses
import traceback
import datetime
import time

try:
    # -- Initialize --
    stdscr = curses.initscr()   # initialize curses screen
    curses.noecho()             # turn off auto echoing of keypress on to screen
    curses.cbreak()             # enter break mode where pressing Enter key
                                #  after keystroke is not required for it to register
    stdscr.keypad(1)            # enable special Key values such as curses.KEY_LEFT etc

    # -- Perform an action with Screen --
    stdscr.border(0)
    stdscr.addstr(5, 5, 'Hello from Curses!', curses.A_BOLD)
    stdscr.addstr(6, 5, 'Press q to close this screen', curses.A_NORMAL)

    while True:
        # stay in this loop till the user presses 'q'
        #stdscr.addstr(7, 5, 'zztop',curses.A_NORMAL)
        ti = str((datetime.datetime.now().time()))
        stdscr.addstr(8, 5, 'Time: '+ ti, curses.A_NORMAL)
        time.sleep(3)

        ch = stdscr.getch()
        if ch == ord('q'):
            break



    # -- End of user code --

except:
    traceback.print_exc()     # print trace back log of the error

finally:
    # --- Cleanup on exit ---
    stdscr.keypad(0)
    curses.echo()
    curses.nocbreak()
    curses.endwin()

【问题讨论】:

    标签: python ncurses python-curses


    【解决方案1】:

    您需要在睡眠前调用stdscr.refresh() 以将输出刷新到屏幕。

    您可能还想将stdscr.nodelay(1) 添加到程序的初始化序列中(即,在stdscr.keypad(1) 的正下方)。这将对stdscr.getch() 进行非阻塞调用。或者,您可以改为调用 stdscr.timeout(3000) 并完全删除对 sleep 的调用。

    【讨论】:

    • stdscr.refresh() 和 stdscr.nodelay(1) 添加了它,它就像我想要的那样工作。将阅读有关“非阻塞” stdscr.getch() 调用的信息。感谢您的帮助,您已修复它。
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2012-03-28
    • 2012-04-08
    • 2019-05-18
    • 2018-01-21
    • 2014-04-23
    • 2013-11-22
    • 2016-07-07
    相关资源
    最近更新 更多