Как сделать меню, которое не требует от пользователя нажать клавишу [Ввод], чтобы сделать выбор?

голоса
23

У меня есть меню в 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...
Задан 05/08/2008 в 03:39
источник пользователем
На других языках...                            


4 ответов

голоса
9

В Windows:

import msvcrt
answer=msvcrt.getch()
Ответил 05/08/2008 в 04:11
источник пользователем

голоса
9

В Linux:

  • установить режим сырья
  • выбрать и прочитать нажатие клавиши
  • восстановить нормальные параметры
импорт SYS
импорт выберите
импорт termios
импорт терминал

Защиту GetKey ():
    old_settings = termios.tcgetattr (sys.stdin)
    tty.setraw (sys.stdin.fileno ())
    select.select ([sys.stdin], [], [], 0)
    Ответ = sys.stdin.read (1)
    termios.tcsetattr (sys.stdin, termios.TCSADRAIN, old_settings)
    обратный ответ

Печать «» "Меню
1) Скажи Foo
2) Скажите Бар «»»

ответ = GetKey ()

если «1» в ответ: печать «Foo»
Элиф «2» в ответ: печать «бар»

Ответил 05/08/2008 в 03:54
источник пользователем

голоса
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, питон ... вещь ..., которая приходит с питоном. Но как только я попробовал это в DOS (эр, cmd.exe), в реальной программе, то он побежал отлично.

Никто не попробовать его в IDLE, если у вас нет под рукой Task Manager.

Я уже забыл, как я жил с меню, arn't супер-мгновенного реагирования.

Ответил 05/08/2008 в 04:51
источник пользователем

голоса
0

Причина MSVCRT терпит неудачу в IDLE потому, что IDLE не имеет доступа к библиотеке, которая работает MSVCRT. В то время как при запуске программы изначально в cmd.exe он прекрасно работает. По той же причине, что ваша программа взрывает на Mac и Linux терминалов.

Но я думаю, если вы собираетесь использовать это специально для окон, больше власти я.

Ответил 05/08/2008 в 05:28
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more