如何制作一个不需要用户按[enter]选择的菜单?
我在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...
4 个回答
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里运行的时候,它完全崩溃了。IDLE是跟Python一起提供的那个工具。但是当我在DOS(也就是CMD.exe)里试的时候,作为一个真正的程序,它就能正常运行了。
大家不要在IDLE里试这个,除非你手边有任务管理器。
我已经忘了以前是怎么忍受那些反应不够快的菜单的了。
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"
10
在Windows系统上:
import msvcrt
answer=msvcrt.getch()