2013-08-14 8 views
5

का पता लगाएं मेरे पास एक एप्लिकेशन है और मैं चाहता हूं कि जब भी उपयोगकर्ता रीटर्न/एंटर दबाता है तो यह इनपुट के साथ डीफ़ पर जाता है।पायथन - कुंजीपटल

मैं इस कोड का उपयोग कर रहा हूँ:

while True: 
    z = getch() 
    # escape key to exit 
    if ord(z) == 9: 
     self.command() 
     break 
    if ord(z) == 27: 
     print "Encerrando processo.." 
     time.sleep(2) 
     sys.exit() 
     break 

लेकिन यह सिर्फ ब्लॉकों वहाँ और अगर मैं और अधिक कोड है यह यह नहीं चलेगा, केवल तभी जबकि टूटी हुई है। मैं या तो tkinter का उपयोग नहीं कर सकता!

क्या ऐसी कोई चीज है जो कुंजी दबाए जाने पर ही चलती है? लूपिंग के बिना।

+0

http://stackoverflow.com/questions/1258566/how-to-get-user-input-during-a-while-loop-without-blocking इनपुट में आपकी सहायता कर सकता है। – cptroot

+0

"मैं सुपरसियर में हूं क्योंकि मुझे पंजीकरण और सामान नहीं है लेकिन यहां हम जाते हैं .." - बस fyi, यह स्वीकार्य नहीं है। आपको लगता है कि गलत साइट पर पोस्ट करना ठीक क्यों है, इसलिए आपको किसी अन्य पर पंजीकरण करने की ज़रूरत नहीं है ?! – ThiefMaster

उत्तर

0

ऐसा लगता है कि आप जो खोज रहे हैं वह इनपुट के आधार पर थोड़ी देर लूप है। यदि आप वांछित राज्यों की एक सरणी में एक सूची डालते हैं, तो आप यह देखने के लिए हर बार इनपुट जांच सकते हैं कि यह उन इनपुटों में से एक है जिन्हें आप पकड़ने की कोशिश कर रहे हैं।

z = getch() 
chars = [9, 27] 
while ord(z) not in chars: 
    z = getch() 

if ord(z) == 9: 
    do_something() 
if ord(z) == 27: 
    do_something_else() 

do_more_things() 
4

कुंजी डिटेक्टर चलाने के लिए आप एक नया धागा बनाना चाहते हैं।

import threading 

class KeyEventThread(threading.Thread): 
    def run(self): 
     # your while-loop here 

kethread = KeyEventThread() 
kethread.start() 

ध्यान दें कि जबकि पाश नहीं चलेगा जब तक आप थ्रेड start() फ़ंक्शन कॉल: यहाँ एक उदाहरण है। साथ ही, यह स्वचालित रूप से फ़ंक्शन को दोहराएगा नहीं - आपको दोहराने के लिए अपने कोड को थोड़ी देर में लपेटना होगा।

थ्रेड के रन() फ़ंक्शन को स्पष्ट रूप से कॉल करें, क्योंकि यह कोड को अन्य सभी कोडों के साथ ऑनलाइन चलाने के लिए अलग-अलग थ्रेड में नहीं चलाएगा। आपको थ्रेडिंग में परिभाषित स्टार्ट() फ़ंक्शन का उपयोग करना होगा। इसलिए यह नया धागा बना सकता है।

यह भी ध्यान दें: यदि आप एटएक्सिट मॉड्यूल का उपयोग करने की योजना बना रहे हैं, तो नए थ्रेड बनाने से यह मॉड्यूल सही तरीके से काम नहीं करेगा। बिलकुल चौकन्ना। :)

मुझे आशा है कि इससे मदद मिलेगी!

संबंधित मुद्दे