كيف أقوم بإنشاء قائمة لا تتطلب من المستخدم الضغط على [إدخال] لإجراء تحديد؟

StackOverflow https://stackoverflow.com/questions/1829

  •  08-06-2019
  •  | 
  •  

سؤال

لدي قائمة في بايثون.كان هذا الجزء سهلا.أنا استخدم raw_input() للحصول على التحديد من المستخدم.

المشكلة هي raw_input (والإدخال) تتطلب من المستخدم الضغط يدخل بعد أن يقوموا بالاختيار.هل هناك أي طريقة لجعل البرنامج يعمل فورًا عند الضغط على المفتاح؟وإليكم ما لدي حتى الآن:

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...
هل كانت مفيدة؟

المحلول

على نظام التشغيل Windows:

import msvcrt
answer=msvcrt.getch()

نصائح أخرى

على لينكس:

  • ضبط الوضع الخام
  • حدد وقراءة ضغطة المفتاح
  • استعادة الإعدادات العادية
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"

واو، استغرق ذلك إلى الأبد.حسنًا، هذا ما انتهيت إليه

#!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، وهو python... الشيء... الذي يأتي مع python.ولكن بمجرد أن جربته في DOS (er، CMD.exe)، كبرنامج حقيقي، كان يعمل بشكل جيد.

لا أحد يحاول ذلك في IDLE، إلا إذا كان لديك مدير المهام في متناول يديك.

لقد نسيت بالفعل كيف كنت أعيش مع القوائم التي لا تستجيب بسرعة فائقة.

سبب فشل msvcrt في IDLE هو أن IDLE لا يصل إلى المكتبة التي تقوم بتشغيل msvcrt.بينما عند تشغيل البرنامج أصلاً في cmd.exe فإنه يعمل بشكل جيد.لنفس السبب الذي أدى إلى تفجير برنامجك على أجهزة Mac وLinux.

ولكن أعتقد أنك إذا كنت ستستخدم هذا خصيصًا لنظام التشغيل Windows، فستوفر لك المزيد من الطاقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top