Πώς μπορώ να κάνω ένα μενού που δεν απαιτεί από το χρήστη να πατήσετε [enter] για να κάνετε μια επιλογή;

ψήφοι
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 εισαγωγής
tty εισαγωγής

getkey def ():
    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) Say Foo
2) Πείτε Bar ""»

answer = getkey ()

αν το "1" στην απάντηση: print "foo"
Elif "2" στην απάντηση: print "bar"

Απαντήθηκε 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 (er, CMD.exe), ως ένα πραγματικό πρόγραμμα, τότε έτρεξε μια χαρά.

Κανείς δεν το δοκιμάσετε σε αδράνεια, αν δεν έχετε Διαχείριση Εργασιών εύχρηστο.

Έχω ήδη ξεχάσει πώς έζησα με μενού που arn't υπερ-άμεση ανταπόκριση.

Απαντήθηκε 05/08/2008 στις 04:51
πηγή χρήστη

ψήφοι
0

Ο λόγος Msvcrt αποτυγχάνει Στην κατάσταση οφείλεται στο γεγονός ότι IDLE δεν έχει πρόσβαση στη βιβλιοθήκη που τρέχει Msvcrt. Ότι, κατά την εκτέλεση του προγράμματος εγγενώς στο cmd.exe λειτουργεί πολύ καλά. Για τον ίδιο λόγο που το πρόγραμμά σας ανατιναχθεί σε Mac και Linux τερματικά.

Αλλά υποθέτω ότι αν θέλει κάποιος να χρησιμοποιεί αυτό ειδικά για τα παράθυρα, περισσότερη δύναμη στο ya.

Απαντήθηκε 05/08/2008 στις 05:28
πηγή χρήστη

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