无法获得带有诅咒的钥匙

Can not get a key with curses

我正在尝试使用 curses 来显示一些统计信息,但我遇到了一个问题。

我想要一个 window 可以通过键盘进行滚动。为此,我创建了一个变量 self.scroll,它告诉我应该显示哪些行。问题是我想在每次按下 KEY_DOWN.

时增加这个变量

这是我的代码: 在 class 的初始化中,我确实有:

    self.stdscr = stdscr
    self.scroll = 0
    stdscr.nodelay(1)
    stdscr.keypad(1)

然后:

    while True:
        ch = self.stdscr.getch()
        if ch == curses.KEY_DOWN:
            self.scroll += 1
            self.add_alert()
            ch = None
        elif ch == curses.KEY_UP:
            if self.scroll >= 1:
                self.scroll -= 1
            self.add_alert()
            ch = None

我还使用了一个可以找到的包装器 here 来初始化所有内容。

事实是变量 scroll 无论如何都停留在 0。此外,即使设置了 noecho() ,我也会看到我按下的每个键(例如 ^[[A)。 我使用了 nodelay(),因为我的线程也在处理一些事情,我不希望它在等待按键被按下时停止。 你知道它可能来自哪里吗?

非常感谢, 贾兹

如果您使用 nodelay,则会干扰 keypad。请改用具有较短超时值的 timeout。 (10 毫秒的超时时间对大多数人都适用)。

终于,它从一开始就工作了。问题只是由于一些奇怪的原因,curses 没有检测到 KEY_UP 和 KEY_DOWN。我只是将它们替换为 u 和 d

if ch == ord('p'):

一切正常。

谢谢大家!