Ответ 1
В Windows:
import msvcrt
answer=msvcrt.getch()
У меня есть меню на 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...
В 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 (er, CMD.exe), как в реальной программе, тогда он работал нормально.
Никто не пытается в IDLE, если у вас нет менеджера задач.
Я уже забыл, как я жил с меню, которое не очень быстро реагирует.
Причина, по которой msvcrt терпит неудачу в IDLE, заключается в том, что IDLE не обращается к библиотеке, которая запускает msvcrt. Если вы запускаете программу из cmd.exe изначально, она работает хорошо. По той же причине, что ваша программа взорвалась на терминалах Mac и Linux.
Но я предполагаю, что если вы собираетесь использовать это специально для окон, больше энергии для вас.