【发布时间】:2019-08-08 18:59:39
【问题描述】:
我正在制作一个 Python 脚本,并希望让用户使用箭头键来浏览屏幕。
我从@yatsa 找到了这个答案,它确实对箭有用: https://stackoverflow.com/a/46449300/11903801
#!/usr/bin/python
import click
printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
while True:
click.echo('Continue? [yn] ', nl=False)
c = click.getchar()
click.echo()
if c == 'y':
click.echo('We will go on')
elif c == 'n':
click.echo('Abort!')
break
elif c == '\x1b[D':
click.echo('Left arrow <-')
elif c == '\x1b[C':
click.echo('Right arrow ->')
else:
click.echo('Invalid input :(')
click.echo('You pressed: "' + ''.join([ '\\'+hex(ord(i))[1:] if i not in printable else i for i in c ]) +'"' )
这个例子应该识别它是按下左键还是右键,并且它还打印任何其他按下的键盘键的“py-string表示”。
说过,我必须更改代码才能使它对我有用...
当我运行上面的代码时,它没有识别左箭头和右箭头。
相反,它打印给我:
You pressed "\xe0K"(左箭头)
和
You pressed "\xe0M"(右箭头)
我做了什么?
用控制台打印给我的这个替换 elifs 中的值,它工作了!
好的,很好,接下来我想识别“Enter Key”,所以我运行脚本,按 Enter,它打印给我:You pressed "\xd"
那么,我做了什么?
使用控制台打印给我的这个字符串创建了一个新的条件。
但是...
elif c == '\xd':
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-2: truncated \xXX escape
Process finished with exit code 1
所以,我不知道是什么问题,我尝试在网上搜索,但没有找到任何可以解释的内容。
我使用的是 Windows 7。
【问题讨论】:
-
强烈建议:如果你真的想要一个文本模式的用户界面,请不依赖 ASCII 光标控制字符。使用curses 库:docs.python.org/3/howto/curses.html
-
@paulsm4 谢谢,现在我正在使用 tkinter。 :)
标签: python