root.update() frame.focus_set() 【python】処理中にキー入力を受け付けて別の処理をしたい 色々調べてみて、 msvcrt というものを使って簡単に出来たので書いておきます。 msvcrtを使ったプログラム↓ (コピペできるように一番下に文字で置いておきます。 key="A" winsound.PlaySound("pressed_A.wav", winsound.SND_FILENAME), def keyB(event): What is going on with this article? 0, パイソン OPENCVで動画を検出して、tkinterのキャンパス上に動画を表示したい, 回答 By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. root.update() global key キーボードイベントを取得したい. -自然言語(OK:日本語、英語 基本的なことなら:スペイン語、ドイツ語)
1, 【募集】 前提・実現したいことPython初心者です。2択クイズゲームを作ろうと思っています。マウス操作に慣れていない方でも使えるようにキーボードからの入力で回答させたいので、とりあえずキーを判定する部分を作ってみました。aキーかbキーが押されたことを確認するためにprint(key)でkeyの値 python tkinter クリックされたウィジェットを取得する 前回の記事は、ボタンがクリックされたとき、commandオプションにコールバック関数を定義して、どのボタンがクリックされたのか調べる方法を紹介した。 python tkinter どのボタンが押されたか判定する方法 - memopy 今回は、bindメ… frame = tk.Canvas(root, width=800, height=600) frame.pack(), keyイベント内でprint(key)を表示させることはできるが、メインの実行時にキーを判定できない。タイマーイベントで対応するときはどうすればよいでしょうか。 -柴犬. frame.place(x=0, y=0) あるプログラムの動作中にあるキーを押したら、他の動作をするとか、プログラムを終了するとかっていうことがしたかったのです。, msvcrtを使ったプログラム↓(コピペできるように一番下に文字で置いておきます。アメーバブログはプログラムコードを載せる環境がよくない。), http://jn1inl.blog77.fc2.com/blog-entry-2039.html, [追記] msvcrt.getch()で返す文字はバイト列になっているので、特定の文字が押されたことを確認したい場合は、「kb.decode()」とする必要があります。, https://qiita.com/masakielastic/items/2a04aee632c62536f82c, もう一つ、pygame を使ってもキー入力が出来そうかと思ったのですが、うまくいかないです。, 正確には、ゲームウィンドウ中をアクティブにした状態でしかキーを受け付けてくれなかったので、コンソールのみでキー入力が出来ませんでした。(私の場合は), pygameを使ったプログラム↓(これもコピペできるように一番下に載せておきます。), ゲームウィンドウをアクティブにした状態(クリックして選択している状態?)なら、方向キーを受け付けてくれます。, ↓こちらのサイトを参考にしました。このサイトでは前にpygameの勉強で大変お世話になっております(。>∀<)ふぇ~, http://aidiary.hatenablog.com/entry/20080510/1275699320, import msvcrtimport timeimport syswhile True: time.sleep(0.01) if msvcrt.kbhit(): # キーが押されているか kb = msvcrt.getch() # 押されていれば、キーを取得する print(kb) sys.exit(), import pygamefrom pygame.locals import *import sys pygame.init()screen = pygame.display.set_mode((640, 480))while True: pressed_keys = pygame.key.get_pressed() # キー入力を取得 if pressed_keys[K_LEFT]: # ← print("left") sys.exit() if pressed_keys[K_RIGHT]: # → print("right") sys.exit() if pressed_keys[K_UP]: # ↑ print("up") sys.exit() if pressed_keys[K_DOWN]: #↓ print("down") sys.exit() # 以下、別のキー入力取得(ESCキー) for event in pygame.event.get(): if event.type == QUIT: sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: sys.exit(), 【python】処理中にキー入力を受け付けて別の処理をしたい | (妄想)天使るしふぇちゃんの日記. PythonでJSON形式の文字列を送信したり、受信したりする時、双方で型を合わせる必要がある。 PythonにはJSO 【Python】【Requests】POSTやGETでJSONやDATAを送受信する方法|MAX999blog frame.create_image(320, 220, image=imgB, tag="illust") 1 / クリップ Copyright © CyberAgent, Inc. All Rights Reserved. frame.focus_set() winsound.PlaySound("pressed_B.wav", winsound.SND_FILENAME), frame.bind("a", keyA) frame.create_image(400, 300, image=pimg), imgA = tk.PhotoImage(file = 'pressed_A.png') 最終的にprint(key)でkeyの値を取り出したいのですがどうすればよいですか。, def keyA(event):でaキーを押されたときkey="A"を代入するようにしておき、frame.bind("a",keyA)でaキーが押された時にkeyAを呼び出して、それをprint(key)で取り出したいが取り出し方がわからない。, root = tk.Tk() 関連記事: マウス周辺をリアルタイムで拡大表示する処理 ; Ruby on Railsのacts_as_listプラグインを使用するときはposition列を :null => false にしてはならない Python初心者です。2択クイズゲームを作ろうと思っています。マウス操作に慣れていない方でも使えるようにキーボードからの入力で回答させたいので、とりあえずキーを判定する部分を作ってみました。aキーかbキーが押されたことを確認するためにprint(key)でkeyの値を取り出そうとしているのですがうまくいきません。 frame.pack(), frame.bind("b", keyB) 実験のためメインスレッドと別のスレッドでtkinterのキャンバス上に描画してみましたが、動くように見えました。他の言語のGUIライブラリーだと複数のスレッドから画面を触るのは「いけません」てことになっているのですが、PythonのGIL(Global Interpreter Lock)の仕様のためそのあたりの制限はゆるーくなっているのかも知れません(もしかたしたらダメなのかも知れません。自身ないです), しかし、上のように書くことはできますがこう書いたからといってプログラミングしやすいかは少々疑問です。普通にイベント駆動型でプログラミングしてもよい気がするのですが・・・どうでしょうか?, pipでkeyboardパッケージをインストールしてから、上記を実行してaキーやbキーを打ってみてください。ドキュメントはココです。, 回答 または、キー判定のためにまったく別の良い方法があれば教えてください。, teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。, 評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。, 上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。, 本サイトでプログラムコードを記載するにはマークダウン記法を使う必要があります。特にpythonは字下げを正確に再現していただかないとコードが正しく伝わりません。「https://teratail.com/help#about-markdown」の「コードを入力」を参考にして質問を編集し、より正確なコード内容が閲覧者に伝わるようご協力ください。, tkinterの動作モデルは所謂イベント駆動型になっており、ウィンドウはroot.mainloop()を実行したときに初めて表示されそれ以降はウィンドウの操作をしている間中ずっとこのmainloop関数から返ってこないという特徴を持ってます。, このイベント駆動型の制御方式はGUIプログラミングではおなじみなので、プログラムの制御方法を「上から下へ順番に実行する」という発想から「何か操作されたら個々の関数が呼び出される」という発想に切り替える必要があります。, ではありますが、Pythonでtkinterを用いる場合、次のようなコードで非イベント駆動型の制御論理を書くこともできてしまうようです。これが常に適切に動作してくれるかどうか少々自身ないですが・・・, ポイントはmainloopの実行前に主たる制御論理(上の例ではmain関数)を別のスレッドで動かすことです。メインスレッドではtkinterの通常の動作(イベント駆動型)が行われておりずっとmainloop関数が動きっぱなしになります。それとは別のスレッドでmain関数が実行され、keyA, keyBで押されたキーをグローバル変数に格納するとmain関数の中でそれを検出して何かするという感じですね。 以下のようにinput()で取得した値を変数に格納できる。 この行が実行されると入力待ちの状態になり、ターミナルやコマンドプロンプト(cmd.exe)などでキーボードから値の入力が可能になる。例えばabcと入力した場合、文字列'abc'として値が取得できる。 input()の引数に文字列を指定すると入力待ち時にその文字列が表示される。省略するとなにも表示されず入力待ちなのか分からないので、入力を促すような文言を指定して表示させたほうが親切。 input()で取得できるのは常に文字列str。数値が入力 … Pythonがまだ不慣れなので、この辺が簡単に書けないですが、、、 10進数の 13 (16進の 0D) は Enterキーの内部コードでする。 簡単な確認の意味で、 13 のままとしています。 1 / クリップ teratailを一緒に作りたいエンジニア, すみません、最初のコード例でwhile文のところにsleep入れるのを忘れておりました。それだとCPUを使いまくるのでよくない例だと思います。sleepを追加しておきました。, ありがとうございました。特にプログラムにこだわりはなく、シンプルなほうが大歓迎なのですが、. http://www.theasciicode.com.ar/ascii-control-characters/escape-ascii-code-27.html, http://stackoverflow.com/questions/12175964/python-method-for-reading-keypress, 好きなもの:
frame.create_image(320, 220, image=imgA, tag="illust") imgB = tk.PhotoImage(file = 'Pressed_B.png'), def keyA(event): PythonでJSON形式の文字列を送信したり、受信したりする時、双方で型を合わせる必要がある。, 辞書型は「’(クォーテーション」でも「”(ダブルクォーテーション)」でもどちらでも柔軟に書けるが、JSONは基本的に 「”(ダブルクォーテーション)」 である必要がある。, これを意識せずに適当にjson.dumps、json.loadsをやったりやらなかったりとかすると、思わぬところでハマってしまう。, JSON形式の文字列をJSONではなくDATAとして送信し、それを取得するパターン。, json.dumps()をすると、requestsがヘッダーをdataではなくjsonと認識してしまうため、dataと明示して送信する。, request.dataをjson.loadsすることで、辞書型として、扱えるようになる。, POST時に「json = 」とすることで、requestsが自動的にContentsTypeをjsonとして送信してくれる。, json.dumpsしている場合、jsonは省略可能。分かりやすさのためには、明示的に記載した方が良いとは思う。, 各項目毎にform.getで取得可能。リストを取得する場合はgetlistを使う。, GETはPOSTのように色々(JSONとかDATAとかFILEとか)送信できないので、送信側も受信側も比較的シンプル。, GET送信されたパラメータは request.args.get(‘キー名’)または request.args[‘キー名’]で取得する。, https://max999blog.com/wp-content/uploads/2020/06/cooltext337433379885251.png, 【Python】【Requests】POSTやGETでJSONやDATAを送受信する方法, 【Mac】【Windows】VisualStudioCodeのインストールと日本語化, 【WordPress】【Local by Flywheel】サーバの知識なしで開発環境を構築する方法, 【JavaScript】【Fabric.js】マウスやオブジェクト操作時に発生するイベントまとめ, 【JavaScript】【Fabric.js】拡大縮小したキャンバスをリセットして元に戻す. コマンドプロンプト上でしか反応しない(どのウィンドウ上の入力でも反応してほしかった), you can read useful information later efficiently. global key Python EventListener Keyboard. pimg = tk.PhotoImage(file="wall.png") frame.place(x=0, y=0) トップ > python3 > Pythonでキーボード操作!キーを打たずに自動化できちゃう!? キーを打たずに自動化できちゃう! 2018 - 03 - 26 More than 3 years have passed since last update. Help us understand the problem. key="B" frame.place(x=0, y=0) Why not register and get more from Qiita?