【问题标题】:How to use click.getchar() to identify "Enter Key" (python)如何使用 click.getchar() 识别“输入键”(python)
【发布时间】: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


【解决方案1】:

我建议使用(或参考)keyboard 库。这里的好处是你将能够兼容 Windows 和 Linux(OSX 似乎在这个库中是实验性的)

要具体回答您的问题,您似乎应该使用0x0d 输入

编辑:添加指向 Enter 键的链接

【讨论】:

  • 谢谢,现在我正在使用 tkinter 作为 UI! :)
猜你喜欢
  • 1970-01-01
  • 2011-05-07
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
相关资源
最近更新 更多