2008-08-05 31 views
22

Tôi có một menu bằng Python. Phần đó thật dễ dàng. Tôi đang sử dụng raw_input() để nhận được lựa chọn từ người dùng.Làm cách nào để tạo một menu không yêu cầu người dùng nhấn [enter] để thực hiện lựa chọn?

Vấn đề là raw_input (và đầu vào) yêu cầu người dùng nhấn Nhập sau khi thực hiện lựa chọn. Có cách nào để làm cho chương trình hành động ngay lập tức khi một phím tắt? Đây là những gì tôi đã có cho đến nay:

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" 

Nó sẽ là tuyệt vời để có một cái gì đó giống như

print menu 
while lastKey = "": 
    lastKey = check_for_recent_keystrokes() 
if "1" in lastKey: #do stuff... 

Trả lời

9

Trên Windows:

import msvcrt 
answer=msvcrt.getch() 
9

Trên Linux:

  • thiết lập chế độ thô
  • chọn và đọc tổ hợp phím
  • khôi phục cài đặt thông thường
 
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" 

3

Wow, mà mất mãi mãi. Ok, đây là những gì tôi đã kết thúc với

#!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 

Không khó sử dụng IDLE, python ... điều ... đi kèm với python. Nhưng một khi tôi đã thử nó trong DOS (er, CMD.exe), như là một chương trình thực sự, sau đó nó chạy tốt.

Không ai thử nó trong IDLE, trừ khi bạn có Trình quản lý Tác vụ hữu ích.

Tôi đã quên cách tôi sống với các trình đơn không phản hồi siêu nhanh.

0

Lý do msvcrt thất bại trong IDLE là vì IDLE không truy cập thư viện chạy msvcrt. Trong khi khi bạn chạy chương trình tự nhiên trong cmd.exe nó hoạt động độc đáo. Vì lý do tương tự mà chương trình của bạn thổi lên trên các thiết bị đầu cuối Mac và Linux.

Nhưng tôi đoán nếu bạn định sử dụng điều này đặc biệt cho cửa sổ, bạn sẽ có nhiều quyền lực hơn.

Các vấn đề liên quan