python -如何制作不需要用户按[回车]进行选择的菜单?

Translate

我有Python菜单。那部分很简单。我正在使用raw_input()从用户那里获得选择。

问题是raw_input(和输入)要求用户按输入他们做出选择之后。有什么方法可以使程序在按键时立即采取行动?到目前为止,这是我得到的:

import sys
print """Menu
1) Say Foo
2) Say Bar"""
answer = raw_input("Make a selection> ")

if "1" in answer: print "foo"
elif "2" in answer: print "bar"

拥有这样的东西真是太好了

print menu
while lastKey = "":
    lastKey = check_for_recent_keystrokes()
if "1" in lastKey: #do stuff...
This question and all comments follow the "Attribution Required."

所有的回答

Translate

在Windows上:

import msvcrt
answer=msvcrt.getch()
来源
Translate

在Linux上:

  • 设置原始模式
  • 选择并阅读按键
  • 恢复正常设置
import sys
import select
import termios
import tty

def getkey():
    old_settings = termios.tcgetattr(sys.stdin)
    tty.setraw(sys.stdin.fileno())
    select.select([sys.stdin], [], [], 0)
    answer = sys.stdin.read(1)
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
    return answer

print """Menu
1) Say Foo
2) Say Bar"""

answer=getkey()

if "1" in answer: print "foo"
elif "2" in answer: print "bar"

来源
Translate

哇,那花了永远。好的,这就是我最终得到的

#!C:\python25\python.exe
import msvcrt
print """Menu
1) Say Foo 
2) Say Bar"""
while 1:
    char = msvcrt.getch()
    if char == chr(27): #escape
        break
    if char == "1":
        print "foo"
        break
    if char == "2":
        print "Bar"
        break

使用IDLE,Python附带的python ...东西...它很难失败。但是,一旦我在DOS(er,CMD.exe)中尝试了它作为一个真实程序,它就可以正常运行。

除非您有任务管理器,否则没人会在IDLE中尝试它。

我已经忘记了我如何生活在无法快速响应的菜单中。

来源
Translate

msvcrt在IDLE中失败的原因是IDLE无法访问运行msvcrt的库。而当您在cmd.exe中本地运行该程序时,它运行良好。出于同样的原因,您的程序在Mac和Linux终端上崩溃了。

但是我想,如果您将要专门针对Windows使用此功能,那么您将获得更多功能。

来源
下一个问题:
c# -摆动鼠标