मैं एक मेनू कैसे बना सकता हूं जिसके लिए चयन करने के लिए उपयोगकर्ता को [प्रवेश] दबाएं?

मुझे पाइथन में एक मेनू मिला है। वह हिस्सा आसान था। मैं उपयोगकर्ता से चयन प्राप्त करने के लिए 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...
0
जोड़ा संपादित
विचारों: 1

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

यह आईडीईएल, पायथन ... चीज ... जो अजगर के साथ आता है, का उपयोग करके कड़ी मेहनत करता है। लेकिन एक बार जब मैंने इसे एक वास्तविक कार्यक्रम के रूप में डॉस (एर, सीएमडी.एक्सई) में आजमाया, तो यह ठीक हो गया।

आईडीएलई में कोई भी कोशिश नहीं करता है, जब तक कि आपके पास टास्क मैनेजर आसान न हो।

मैं पहले से ही भूल गया हूं कि मैं मेनू के साथ कैसे रहता हूं जो सुपर-तत्काल उत्तरदायी नहीं होता है।

0
जोड़ा

लिनक्स पर:

  • कच्चे मोड को सेट करें
  • कीस्ट्रोक का चयन करें और पढ़ें
  • सामान्य सेटिंग्स को पुनर्स्थापित करें
import sys
import select
import termios
import tty

def getkey():
    old_settings = termios.tcgetattr(sys.stdin)
    tty.setraw(sys.stdin.fileno())
    select.select([sys.stdin], [], [], 0)
    answer = sys.stdin.read(1)
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
    return answer

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

answer=getkey()

if "1" in answer: print "foo"
elif "2" in answer: print "bar"

0
जोड़ा

विंडोज़ पर:

import msvcrt
answer=msvcrt.getch()
0
जोड़ा

आईडीएल में msvcrt विफल होने का कारण यह है क्योंकि आईडीएलई लाइब्रेरी तक नहीं पहुंच रहा है जो msvcrt चलाता है। जबकि जब आप cmd.exe में प्रोग्राम को मूल रूप से चलाते हैं तो यह अच्छी तरह से काम करता है। इसी कारण से आपका प्रोग्राम मैक और लिनक्स टर्मिनलों पर उड़ाता है।

लेकिन मुझे लगता है कि यदि आप विशेष रूप से विंडोज़ के लिए इसका उपयोग करने जा रहे हैं, तो अधिक शक्ति।

0
जोड़ा