Wie kann ich ein Menü machen, die drücken die Benutzer nicht erforderlich, um [Eingabe], um eine Auswahl zu treffen?

stimmen
23

Ich habe ein Menü in Python bekommt. Dieser Teil war einfach. Ich bin mit raw_input()der Auswahl vom Benutzer zu erhalten.

Das Problem ist , dass raw_input(und Eingang) muss den Benutzer drücken , Enternachdem sie eine Auswahl treffen. Gibt es eine Möglichkeit , das Programm wirkt sofort auf Knopfdruck zu machen? Hier ist , was ich bisher habe:

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

Es wäre toll, etwas zu haben, wie

print menu
while lastKey = :
    lastKey = check_for_recent_keystrokes()
if 1 in lastKey: #do stuff...
Veröffentlicht am 05/08/2008 um 03:39
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
9

Unter Windows:

import msvcrt
answer=msvcrt.getch()
Beantwortet am 05/08/2008 um 04:11
quelle vom benutzer

stimmen
9

Unter Linux:

  • set Rohmodus
  • auswählen und den Tastendruck lesen
  • Wiederherstellung der normalen Einstellung
import sys
Import wählen
Import termios
Import tty

def getKey ():
    old_settings = termios.tcgetattr (sys.stdin)
    tty.setraw (sys.stdin.fileno ())
    select.select ([sys.stdin], [], [], 0)
    Antwort = sys.stdin.read (1)
    termios.tcsetattr (sys.stdin, termios.TCSADRAIN, old_settings)
    Rückantwort

print "" "Menu
1) Say Foo
2) Sprich Bar ""“

answer = getkey ()

wenn "1" in der Antwort: print "foo"
elif "2" in der Antwort: print "bar"

Beantwortet am 05/08/2008 um 03:54
quelle vom benutzer

stimmen
4

Wow, das hat ewig gedauert. Ok, hier ist, was ich am Ende mit

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

Es ist immer schwer IDLE verwenden, der Python ... Ding ... das kommt mit Python. Aber sobald ich es in DOS versucht (er, CMD.exe) als echtes Programm, dann lief es gut.

Niemand versuchen, es in IDLE, wenn Sie den Task-Manager zur Hand haben.

Ich habe schon vergessen, wie ich mit Menü gelebt, die super-Instant reaktions arn't.

Beantwortet am 05/08/2008 um 04:51
quelle vom benutzer

stimmen
0

Der Grund msvcrt in IDLE versagt, weil IDLE ist nicht die Bibliothek zugreifen, die msvcrt läuft. Während, wenn Sie das Programm nativ in cmd.exe ausführen funktioniert es gut. Aus dem gleichen Grunde, dass Ihr Programm bläst auf Mac und Linux-Terminals auf.

Aber ich denke, wenn du gehst, dies für Fenster speziell zu verwenden, um mehr Leistung zu ya.

Beantwortet am 05/08/2008 um 05:28
quelle vom benutzer

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