如何制作一个不需要用户按[Enter]进行选择的菜单?

uet 发布于 2018-02-08 python 最后更新 2018-02-08 01:05 911 浏览

我有一个Python的菜单。那部分很简单。我正在使用raw_input()从用户处获得选择。 问题在于raw_input(和输入)需要用户在做出选择之后按下 Enter 。有什么方法可以使程序在按键时立即行动?这是迄今为止我所得到的:

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...
已邀请:

nodio

赞同来自:

在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"
    

nodio

赞同来自:

在Windows上:

import msvcrt
answer=msvcrt.getch()

uet

赞同来自:

哇,那永远都是。好的,这是我最后的结果

#!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自带的努力失败。但是,一旦我在DOS(呃,CMD.exe)尝试它,作为一个真正的程序,然后运行良好。 没有人尝试在空闲,除非你有方便的任务管理器。 我已经忘记了我是如何与超级即时响应的菜单生活在一起的。

jdolor

赞同来自:

msvcrt在IDLE中失败的原因是因为IDLE没有访问运行msvcrt的库。而当你在cmd.exe中本地运行程序时,它很好地工作。出于同样的原因,您的程序在Mac和Linux终端上爆炸。 但我想如果你打算使用这个专门为Windows,更多的权力雅。