如何制作不要求用户按[输入]进行选择的菜单?
时间:2020-03-05 18:37:39 来源:igfitidea点击:
我有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...
解决方案
回答
在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"
回答
在Windows上:
import msvcrt answer=msvcrt.getch()
回答
哇,那花了永远。好的,这就是我最终得到的
#!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中尝试它。
我已经忘记了我如何生活在无法快速响应的菜单中。
回答
msvcrt在IDLE中失败的原因是IDLE无法访问运行msvcrt的库。而当我们在cmd.exe中本机运行程序时,它将很好地工作。出于同样的原因,程序在Mac和Linux终端上会崩溃。
但是我想,如果我们将要专门针对Windows使用此功能,则可以使用更多功能。