Как создать меню, которое не требует от пользователя нажатия [ввод] для выбора?
-
08-06-2019 - |
Вопрос
У меня есть меню на 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...
Решение
В Windows:
import msvcrt
answer=msvcrt.getch()
Другие советы
В 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"
Ух ты, это заняло целую вечность.Хорошо, вот что у меня получилось
#!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, если у вас нет под рукой Диспетчера задач.
Я уже забыл, как жил с меню, которые не реагируют мгновенно.
Причина сбоя msvcrt в IDLE заключается в том, что IDLE не обращается к библиотеке, в которой работает msvcrt.А когда вы запускаете программу в cmd.exe, она работает хорошо.По той же причине, по которой ваша программа взрывается на терминалах Mac и Linux.
Но я думаю, если вы собираетесь использовать это специально для Windows, вам будет больше возможностей.