สร้างเมนู Python แบบ Real-Time: ไม่ต้องกด Enter อีกต่อไป!

การสร้างเมนูที่มีปฏิสัมพันธ์ใน Python มักจะเป็นเรื่องที่ง่ายและตรงไปตรงมา อย่างไรก็ตาม หากคุณต้องการปรับปรุงประสบการณ์ของผู้ใช้โดยให้การเลือกสามารถทำได้ด้วยการกดแป้นพิมพ์แทนที่จะให้ผู้ใช้กด Enter คุณอาจจะพบว่าตัวเองอยู่ในสถานการณ์ที่ยุ่งยาก ในโพสต์บล็อกนี้ เราจะสำรวจปัญหาที่ต้องการให้กดปุ่ม Enter เพื่อยืนยันการเลือกเมนู และเสนอวิธีแก้ปัญหาที่ใช้การตรวจจับการป้อนข้อมูลจากแป้นพิมพ์

เข้าใจปัญหา

ในแอปพลิเคชันคอนโซลแบบดั้งเดิม วิธีการป้อนข้อมูลของผู้ใช้ เช่น raw_input() (หรือเพียง input() ใน Python 3) โดยทั่วไปต้องการให้ผู้ใช้กดปุ่ม Enter หลังจากเลือกตัวเลือก ซึ่งอาจลดทอนประสบการณ์ของผู้ใช้ โดยเฉพาะในบริบทของเมนูที่ต้องการการตอบสนองอย่างรวดเร็ว

โค้ดที่ผู้ใช้ให้มายังไงนั้นมีดังนี้:

import sys
print """เมนู
1) กล่าว Foo
2) กล่าว Bar"""
answer = raw_input("ทำการเลือก> ")

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

ในสถานะนี้ โค้ดนี้ต้องการให้ผู้ใช้กด Enter หลังจากพิมพ์การเลือกของพวกเขา แต่มีวิธีที่ดีกว่าที่จะทำ!

วิธีแก้ปัญหา: ใช้ msvcrt

หากคุณอยู่บนแพลตฟอร์ม Windows ไลบรารี msvcrt จะช่วยให้เราเข้าถึงการตรวจจับการป้อนข้อมูลแบบเรียลไทม์ ฟังก์ชันสำคัญที่นี่คือ getch() ซึ่งจับการกดแป้นพิมพ์ทันทีโดยไม่ต้องรอการกดปุ่ม Enter

คู่มือทีละขั้นตอน

  1. นำเข้าไลบรารี เริ่มต้นด้วยการนำเข้าไลบรารี msvcrt ซึ่งช่วยให้เราสามารถโต้ตอบกับการป้อนข้อมูลจากแป้นพิมพ์ในคอนโซลได้

    import msvcrt
    
  2. จับการกดแป้นพิมพ์ ใช้ฟังก์ชัน getch() เพื่อรอการกดแป้นพิมพ์หนึ่งครั้ง ทำให้โปรแกรมสามารถทำงานในขณะที่ปุ่มถูกกด

    answer = msvcrt.getch()
    
  3. ดำเนินการเมนู ตอนนี้ เรามาสร้างเมนูง่าย ๆ ที่ฟังการกดปุ่ม 1 หรือ 2 โดยไม่ต้องการ Enter

    import msvcrt
    
    print("เมนู")
    print("1) กล่าว Foo")
    print("2) กล่าว Bar")
    
    while True:  # วนลูปไม่สิ้นสุดเพื่อตรวจสอบการกดแป้น
        answer = msvcrt.getch()  # รอการกดแป้น
    
        if answer == b'1':  # หากกด '1'
            print("foo")
            break  # ออกจากลูปหลังจากตอบสนอง
        elif answer == b'2':  # หากกด '2'
            print("bar")
            break  # ออกจากลูปหลังจากตอบสนอง
    

วิธีการทำงาน

  • เมนูจะแสดงขึ้นและโปรแกรมจะเข้าสู่ลูป
  • ฟังก์ชัน getch() จะหยุดโปรแกรมจนกว่าผู้ใช้จะกดปุ่ม
  • เมื่อตรวจพบกดปุ่ม มันจะตรวจสอบว่าตรงกับ 1 หรือ 2 หรือไม่ ซึ่งจะดำเนินการที่เหมาะสมและจากนั้นออกจากลูป

สรุป

โดยการปฏิบัติตามขั้นตอนที่กล่าวถึงข้างต้น คุณสามารถสร้างประสบการณ์เมนูที่มีประสิทธิภาพและเป็นมิตรกับผู้ใช้ในแอปพลิเคชัน Python ของคุณ ด้วยความช่วยเหลือของไลบรารี msvcrt ที่อนุญาตให้ตรวจจับการกดปุ่มทันที ผู้ใช้สามารถมีส่วนร่วมกับโปรแกรมของคุณได้โดยไม่ต้องกดปุ่ม Enter ที่ยุ่งยาก

ตอนนี้คุณสามารถปรับปรุงแอปพลิเคชันในคอนโซลและสร้างปฏิสัมพันธ์ที่ราบรื่นให้กับผู้ใช้ ขอให้สนุกกับการเขียนโค้ด!