Hvordan gjør jeg en meny som ikke krever at brukeren trykker [enter] for å foreta et valg?

stemmer
23

Jeg har en meny i Python. Denne delen var lett. Jeg bruker raw_input()å få valg fra brukeren.

Problemet er at raw_input(og inngang) kreve at brukeren kan trykke Enteretter at de foretar et valg. Er det noen måte å gjøre programmet handle umiddelbart ved et tastetrykk? Her er hva jeg har så langt:

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

Det ville være flott å ha noe sånt

print menu
while lastKey = :
    lastKey = check_for_recent_keystrokes()
if 1 in lastKey: #do stuff...
Publisert på 05/08/2008 klokken 02:39
kilden bruker
På andre språk...                            


4 svar

stemmer
9

På Windows:

import msvcrt
answer=msvcrt.getch()
Svarte 05/08/2008 kl. 03:11
kilden bruker

stemmer
9

På Linux:

  • satt raw-modus
  • velge og lese tastetrykk
  • gjenopprette normale innstillinger
import sys
import velg
import termios
import tty

def getKey ():
    old_settings = termios.tcgetattr (sys.stdin)
    tty.setraw (sys.stdin.fileno ())
    select.select ([sys.stdin], [], [], 0)
    Svaret = sys.stdin.read (1)
    termios.tcsetattr (sys.stdin, termios.TCSADRAIN, old_settings)
    avkastning svar

print "" "Meny
1) Si Foo
2) Si Bar """

answer = getKey ()

hvis "1" i svar: print "foo"
elif "2" i svar: print "bar"

Svarte 05/08/2008 kl. 02:54
kilden bruker

stemmer
4

Wow, det tok evigheter. Ok, her er hva jeg har endt opp med

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

Det mislykkes vanskelig å bruke IDLE, python ... ting ... som kommer med python. Men når jeg prøvde den i DOS (er, cmd.exe), som en ekte program, så det gikk fint.

Ingen prøve det i IDLE, med mindre du har Task Manager hendig.

Jeg har allerede glemt hvordan jeg levde med menyer som arn't super-instant responsive.

Svarte 05/08/2008 kl. 03:51
kilden bruker

stemmer
0

Grunnen Msvcrt svikter i IDLE er fordi IDLE ikke har tilgang biblioteket som går Msvcrt. Mens når du kjører programmet opprinnelig i cmd.exe fungerer det pent. Av samme grunn at programmet blåser opp på Mac og Linux-terminaler.

Men jeg antar at hvis du skal bruke dette spesielt for vinduer, mer makt til ya.

Svarte 05/08/2008 kl. 04:28
kilden bruker

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