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

问题是raw_input (和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...

===============>>#1 票数:9

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

===============>>#2 票数:9 已采纳

在Windows上:

import msvcrt
answer=msvcrt.getch()

===============>>#3 票数:4

哇,这需要永远。 好的,这就是我最终的结果

#!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(呃,CMD.exe)中尝试它,作为一个真正的程序,那么它运行正常。

没有人在IDLE中尝试它,除非你有方便的任务管理器。

我已经忘记了我的菜单是如何生活的,不是超级即时响应。

===============>>#4 票数:0

msvcrt在IDLE中失败的原因是因为IDLE没有访问运行msvcrt的库。 而当您在cmd.exe中本机运行该程序时,它可以很好地工作。 出于同样的原因,您的程序在Mac和Linux终端上爆炸。

但我想如果你打算专门用于Windows,那么你的功能会更强。

  ask by Grant translate from so

未解决问题?本站智能推荐: