Как мне сделать меню, которое не требует от пользователя нажатия [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 ответа
В Linux:
- установить сырой режим
- выберите и прочитайте нажатие клавиши
- восстановить нормальные настройки
импорт системы выбор импорта импортный терминос импорт 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) ответ ответ печать "" "Меню 1) Скажи Фу 2) Скажи Бар "" " ответ = GetKey () если "1" в ответе: выведите "foo" elif "2" в ответе: печатать "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, больше мощности для вас.