【问题标题】:Key event printing in a terminal using `curses`使用“curses”在终端中打印关键事件
【发布时间】:2014-03-01 23:54:44
【问题描述】:

我想在终端中使用curses 动态打印文本,但是当按下这种键时,以下代码不会显示键向上/向下文本,而循环文本会更新。我做错了什么?我在 Mac OS Maverick 上。

import curses
import time

screen = curses.initscr()

curses.noecho()
curses.curs_set(0)
screen.keypad(1)
screen.nodelay(1)
i = 0

while True:
    i += 1

    event = screen.getch()
    screen.clear()

    if event == ord("q"):
        break

    elif event == curses.KEY_UP:
        screen.addstr("The User Pressed UP", curses.A_REVERSE)
        time.sleep(3)

    elif event == curses.KEY_DOWN:
        screen.addstr("The User Pressed DOWN", curses.A_BLINK)
        time.sleep(3)

    else:
        screen.addstr("Loop {0}".format(i))

curses.endwin()

我已经测试了上面的第二个代码,它运行良好。对我来说很奇怪......

import curses

screen = curses.initscr()

curses.noecho()
curses.curs_set(0)
screen.keypad(1)
screen.nodelay(1)
i = 0

while True:
    i += 1

    event = screen.getch()

    if event == ord("q"):
        break

    elif event == curses.KEY_UP:
        screen.clear()
        screen.addstr(
            "The User Pressed UP in the loop {0}".format(i),
            curses.A_REVERSE
        )

    elif event == curses.KEY_DOWN:
        screen.clear()
        screen.addstr(
            "The User Pressed DOWN in the loop {0}".format(i),
            curses.A_BLINK
        )

curses.endwin()

【问题讨论】:

    标签: python-3.x python-curses


    【解决方案1】:

    解决方法是使用screen.refresh()

    import curses
    import time
    
    screen = curses.initscr()
    
    curses.noecho()
    curses.curs_set(0)
    screen.keypad(1)
    screen.nodelay(1)
    
    i = 0
    
    while True:
        i += 1
    
        event = screen.getch()
        screen.clear()
    
        if event == ord("q"):
            break
    
        elif event == curses.KEY_UP:
            screen.addstr("The User Pressed UP", curses.A_REVERSE)
            screen.refresh()
            time.sleep(2)
    
        elif event == curses.KEY_DOWN:
            screen.addstr("The User Pressed DOWN", curses.A_BLINK)
            screen.refresh()
            time.sleep(2)
    
        else:
            screen.addstr("Loop {0}".format(i))
    
    curses.endwin()
    

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 2011-09-28
      • 2013-09-08
      • 2011-11-08
      • 2022-11-02
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多