使用curses,如何更新屏幕或等待密钥?

时间:2015-02-04 18:43:44

标签: python multithreading ncurses

如何更新屏幕或同时等待密钥?我在Python上使用unicurses但我认为我在C中会遇到同样的问题。 这是我想在伪代码中做的事情:

function startScreen(){
   stdscr = initscr()
   while True{
      - Update screen using a variable that is constantly changing (probably by a thread, right?)
      - Get a key with getch() - to close or interact with the screen
   }
}

我的问题是除非发生某些事情,否则屏幕不会更新,例如调整屏幕大小或按键。我正在考虑使用while循环(和time.sleep(1)?)来更新屏幕和一个等待键的线程。那可能吗?我对线程知之甚少,这就是我要问的原因。有更简单的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

这可以在没有任何复杂的多线程的情况下完成。函数curses.halfdelay也可以在您使用的unicurses库中找到。需要等待十分之一秒才能继续。 https://docs.python.org/3/library/curses.html#curses.halfdelay

这是一个示例代码,除非有按下按钮,否则每半秒刷新一次,在这种情况下会立即更新。

import curses
scr = curses.initscr()
curses.halfdelay(5)           # How many tenths of a second are waited, from 1 to 255
curses.noecho()               # Wont print the input
while True:
    char = scr.getch()        # This blocks (waits) until the time has elapsed,
                              # or there is input to be handled
    scr.clear()               # Clears the screen
    if char != curses.ERR:    # This is true if the user pressed something
        scr.addstr(0, 0, chr(char))
    else:
        scr.addstr(0, 0, "Waiting")