我正在构建一个curses模块,并使用KEY_DOWN检查是否按下了向下箭头键。
但是,我收到一个名称错误,说明没有定义KEY_DOWN。
if value == KEY_DOWN:
NameError:未定义全局名称“KEY_DOWN”
答案 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!")