Jak zrobić menu, które nie wymaga od użytkownika naciśnij [Enter], aby dokonać wyboru?

głosy
23

Mam menu w Pythonie. Ta część była łatwa. Używam raw_input()uzyskać wybór z użytkownikiem.

Problem polega na tym, że raw_input(i wejście) wymagać od użytkownika, aby nacisnąć Enterpo robią wyboru. Czy istnieje jakiś sposób, aby natychmiast dokonać aktu programu na naciśnięcie klawisza? Oto co mam do tej pory:

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

Byłoby wspaniale mieć coś takiego

print menu
while lastKey = :
    lastKey = check_for_recent_keystrokes()
if 1 in lastKey: #do stuff...
Utwórz 05/08/2008 o 03:39
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
9

W systemie Linux:

  • ustawić tryb raw
  • wybrać i przeczytać klawiszy
  • przywrócić normalne ustawienia
import sys
import wybierz
termios import
import tty

getKey def ():
    old_settings = termios.tcgetattr (sys.stdin)
    tty.setraw (sys.stdin.fileno ())
    select.select ([sys.stdin], [], [], 0)
    Odpowiedź = sys.stdin.read (1)
    termios.tcsetattr (sys.stdin, termios.TCSADRAIN, old_settings)
    powrót odpowiedź

print "" "Menu
1) twierdzi Foo
2) Say Bar ""”

answer = getKey ()

jeżeli "1" w odpowiedzi: print "foo"
Elif "2" w odpowiedzi: print "bar"

Odpowiedział 05/08/2008 o 03:54
źródło użytkownik

głosy
9

W systemie Windows:

import msvcrt
answer=msvcrt.getch()
Odpowiedział 05/08/2008 o 04:11
źródło użytkownik

głosy
4

Wow, to trwało wieki. Ok, oto co mam zakończyła się

#!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

zawiedzie trudno użyciu IDLE, pyton ... ... rzecz, która przychodzi z pytona. Ale gdy próbowałem go w systemie DOS (ER, cmd.exe), jako prawdziwy program, to zabrakło w porządku.

Nikt nie spróbować go w stanie spoczynku, chyba że masz Task Manager przydać.

Już zapomniał jak żyłem z menu, które ar super natychmiastowy reaguje.

Odpowiedział 05/08/2008 o 04:51
źródło użytkownik

głosy
0

Powodem msvcrt nie jest w IDLE IDLE ponieważ nie korzysta z biblioteki, który działa msvcrt. Natomiast po uruchomieniu programu natywnie w cmd.exe to działa dobrze. Z tego samego powodu, że program wysadza na zaciskach Mac i Linux.

Ale myślę, że jeśli masz zamiar używać tego specjalnie dla Windows, więcej mocy do ya.

Odpowiedział 05/08/2008 o 05:28
źródło użytkownik

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