知りたいこと
- 矢印キーを押したら特定の処理をする方法
- WindowとMacではキーボードのキーコードが違う?
作業環境
- MacOS 12.3.1
- conda 4.14.0
- Python 3.10.4(仮想環境にインストールされているバージョン)
- PySimpleGUI 4.60.3 (仮想環境にインストールされているバージョン)
- VSCode
困っていること
動画教材の模写(ときには提供されているコードをコピペ)をしながらPythonの学習をしています。
矢印キー上下左右どれが押されたのか検知し、それぞれ別の処理を行うのですが、検知してくれていないのかif文が全く機能してくれません。
(今回の場合、左キーを押したらLeftとプリントされる処理です)
コードは以下の通りです。
python
1import PySimpleGUI as sg 2 3# game constants 4FIELD_SIZE = 400 5sg.theme('Green') 6field = sg.Graph( 7 canvas_size = (FIELD_SIZE, FIELD_SIZE), 8 graph_bottom_left = (0, 0), 9 graph_top_right = (FIELD_SIZE, FIELD_SIZE), 10 background_color = 'black') 11layout = [[field]] 12 13window = sg.Window('Snake', layout, return_keyboard_events = True) 14 15while True: 16 event, values = window.read() 17 # print(f"event='{event}', code={ord(event[0])}, values={values}\n") 18 if event == sg.WIN_CLOSED: break 19 if event == 'Left:37': print('left') 20 if event == 'Up:38': print('Up') 21 if event == 'Right:39': print('Right') 22 if event == 'Down:40': print('Down') 23 24window.close()
(出典:YouTube https://github.com/clear-code-projects/PySimpleGuiUltimate / GitHub https://github.com/clear-code-projects/PySimpleGuiUltimate/blob/main/snake.py)
調べたこと・試したこと
MacOSのキーコードっぽいものに書き換える
調べると、MacOSとWindowsはキーコードが違う?ようなことを目にしたので、上記のコードでコメントアウトしている記述のコメントを解除し、実行して番号を調べました。
(教材の講師のOSは不明です)
キーコードの調べ方の参考:https://qiita.com/GOU_KUN/questions/cf940c9a85eba56cb29d
python
1# これを実行して 2print(f"event='{event}', code={ord(event[0])}, values={values}\n") 3 4# 出力されたもの 5event='Left:2063660802', code=76, values={0: (None, None)} 6 7event='Up:2113992448', code=85, values={0: (None, None)} 8 9event='Right:2080438019', code=82, values={0: (None, None)} 10 11event='Down:2097215233', code=68, values={0: (None, None)}
教材のコードから'Left:37'
→ 'Left:76'
や'76'
や76
というように4つとも3種類変更しましたが、何も起こりませんでした。
sudoでPython3を実行する
Macはセキュリティ上、Pythonがキー入力を追跡できないようにしているという記事を見かけたので、ターミナルから$ sudo python3 filename.py
で実行してみましたが、if文のところは何も起こりませんでした。
そもそも先に試したコードでキーコードっぽいものを出力できているので、セキュリティの問題ではなさそうだと感じました。

回答1件
あなたの回答
tips
プレビュー