KEY_DOWN在CURSES中不起作用

时间:2014-01-27 19:10:37

标签: curses

我正在构建一个curses模块,并使用KEY_DOWN检查是否按下了向下箭头键。

但是,我收到一个名称错误,说明没有定义KEY_DOWN。

if value == KEY_DOWN:

NameError:未定义全局名称“KEY_DOWN”

3 个答案:

答案 0 :(得分:2)

美好的一天!

你必须这样做:

if value == curses.KEY_DOWN:

让它发挥作用。

希望这有效!!!
但如果这不起作用,请向我们展示您的代码(以便我们对其进行分析)

答案 1 :(得分:0)

我不知道为什么yave是名为KEY_DOWN的名字,但是如果你想要一把钥匙,你需要做3次。警告,第一个getch与 ESC 相同。这意味着你要么确保它没有在 ESC 上关闭,要么像我在下面那样做一些解决方法。我还列出了每个键的getch图表。

关键
ESC
UP
DOWN

LEFT
的getch
27
27
27
27
27
的getch

[
[
[
[
的getch

A

C
d

这意味着当你点击任何箭头键并且你正在触发 ESC

在ruby中,我尝试了检查27,然后在另一个getch上快速超时。如果它得到[它是箭头或其他东西,否则它是转义键。这是我的红宝石代码:

def read_key
  ch = getch
  return check_escape_chars if ch == 27
  ch
end

def check_escape_chars
  require 'timeout'
  begin
    Timeout.timeout(0.0001) {getch}
    case getch
    when "A"; return "UP"
    when "B"; return "DOWN"
    when "C"; return "RIGHT"
    when "D"; return "LEFT"
    end
  rescue Timeout::Error
    return "ESC"
  end
end

答案 2 :(得分:0)

要遵循mvndaai的答案,如果要在Python中检测箭头键,则必须将三个不同的ASCII值进行AND运算。例如:

    key = getch()
    if key == (27 and 91 and 65):   #27 is ESC, 91 is [, and 65 is A
        print("Up key pressed!")
    if key == (27 and 91 and 66):
        print("Down key pressed!")
    if key == (27 and 91 and 67):
        print("Right key pressed!")
    if key == (27 and 91 and 68):
        print("Left key pressed!")