无法获得带有诅咒的钥匙
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'):
一切正常。
谢谢大家!
我正在尝试使用 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'):
一切正常。
谢谢大家!