Jak vytvořit nabídku, která nevyžaduje, aby uživatel stisknout [enter] provést výběr?

hlasů
23

Mám nabídku v Pythonu. Tato část byla snadná. Já používám raw_input()dostat výběr ze strany uživatele.

Problém je v tom, že raw_input(a vstup) vyžadovat, aby uživatel stisknout Enterpoté, co provedete výběr. Existuje nějaký způsob, jak program akt bezprostředně po stisknutí klávesy? Tady je to, co jsem dostal tak daleko:

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

Bylo by skvělé mít něco podobného

print menu
while lastKey = :
    lastKey = check_for_recent_keystrokes()
if 1 in lastKey: #do stuff...
Položena 05/08/2008 v 03:39
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
9

V systému Windows:

import msvcrt
answer=msvcrt.getch()
Odpovězeno 05/08/2008 v 04:11
zdroj uživatelem

hlasů
9

V systému Linux:

  • nastaven režim raw
  • vybrat a přečíst úhoz
  • obnovit normální nastavení
import sys
import select
dovozní termios
import tty

def GETKEY ():
    old_settings = termios.tcgetattr (sys.stdin)
    tty.setraw (sys.stdin.fileno ())
    select.select ([sys.stdin], [], [], 0)
    Odpověď = sys.stdin.read (1)
    termios.tcsetattr (sys.stdin, termios.TCSADRAIN, old_settings)
    return odpověď

print "" "Menu
1) Say Foo
2) Řekni Bar ""“

answer = GETKEY ()

-li "1" v odpovědi: print "foo"
elif "2" v odpověď: print "bar"

Odpovězeno 05/08/2008 v 03:54
zdroj uživatelem

hlasů
4

Wow, to trvalo věčnost. Ok, tady je to, co jsem skončil s

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

To nedokáže těžké pomocí nečinný, Python ... věc ... která přichází s python. Ale jakmile jsem se snažil to v DOSu (er, cmd.exe), jako skutečný program, pak to běželo v pohodě.

Nikdo to vyzkoušet v klidovém, pokud nemáte po ruce Správce úloh.

Už jsem zapomněl, jak jsem žil s menu, která arn't super-okamžité citlivý.

Odpovězeno 05/08/2008 v 04:51
zdroj uživatelem

hlasů
0

Důvodem msvcrt selhává v klidovém Je tomu tak proto IDLE není přístup do knihovny, který běží msvcrt. Zatímco při spuštění programu nativně v cmd.exe to funguje dobře. Ze stejného důvodu, že váš program vybuchne na Mac a Linux terminálů.

Ale myslím, že pokud bude toto použití specificky pro Windows, více síly na tebe.

Odpovězeno 05/08/2008 v 05:28
zdroj uživatelem

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