27

私はPythonでメニューを持っています。その部分は簡単でした。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...
4

4 に答える 4

10

Windows の場合:

import msvcrt
answer=msvcrt.getch()
于 2008-08-05T03:11:55.570 に答える
9

Linux の場合:

  • raw モードを設定する
  • キーストロークを選択して読み取る
  • 通常の設定に戻す
システムをインポート
選択をインポート
用語のインポート
tty をインポート

デフ getkey():
    old_settings = termios.tcgetattr(sys.stdin)
    tty.setraw(sys.stdin.fileno())
    select.select([sys.stdin], [], [], 0)
    回答 = sys.stdin.read(1)
    termios.tcsetattr(sys.stdin、termios.TCSADRAIN、old_settings)
    答えを返す

印刷 """メニュー
1) フーと言う
2) セイバー"""

答え=getkey()

答えが「1」の場合: print "foo"
答えの elif "2": print "bar"

于 2008-08-05T02:54:54.577 に答える
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

IDLE、python ... thing...pythonに付属しているものを使用すると失敗します。しかし、実際のプログラムとしてDOS(er、CMD.exe)で試してみると、問題なく動作しました。

タスクマネージャーが手元にない限り、IDLEで試してみる人は誰もいません。

すぐに反応しないメニューをどのように使っていたかをすでに忘れてしまいました。

于 2008-08-05T03:51:57.737 に答える
0

IDLEでmsvcrtが失敗する理由は、IDLEがmsvcrtを実行するライブラリにアクセスしていないためです。一方、cmd.exeでネイティブにプログラムを実行すると、うまく機能します。プログラムがMacおよびLinux端末で爆発するのと同じ理由で。

しかし、これを特にWindowsに使用する場合は、より強力になります。

于 2008-08-05T04:28:03.747 に答える