質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

Macにて、キーボードのどのキーが押されたか検知し、特定の処理をする方法

Cocode
Cocode

総合スコア1640

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0リアクション

0クリップ

236閲覧

投稿2022/09/27 16:03

編集2022/09/27 17:57

知りたいこと

  • 矢印キーを押したら特定の処理をする方法
  • WindowとMacではキーボードのキーコードが違う?

作業環境

  • MacOS 12.3.1
  • conda 4.14.0
    • Python 3.10.4(仮想環境にインストールされているバージョン)
    • PySimpleGUI 4.60.3 (仮想環境にインストールされているバージョン)
  • VSCode

困っていること

動画教材の模写(ときには提供されているコードをコピペ)をしながらPythonの学習をしています。
矢印キー上下左右どれが押されたのか検知し、それぞれ別の処理を行うのですが、検知してくれていないのかif文が全く機能してくれません。
(今回の場合、左キーを押したらLeftとプリントされる処理です)

コードは以下の通りです。

python

import PySimpleGUI as sg # game constants FIELD_SIZE = 400 sg.theme('Green') field = sg.Graph( canvas_size = (FIELD_SIZE, FIELD_SIZE), graph_bottom_left = (0, 0), graph_top_right = (FIELD_SIZE, FIELD_SIZE), background_color = 'black') layout = [[field]] window = sg.Window('Snake', layout, return_keyboard_events = True) while True: event, values = window.read() # print(f"event='{event}', code={ord(event[0])}, values={values}\n") if event == sg.WIN_CLOSED: break if event == 'Left:37': print('left') if event == 'Up:38': print('Up') if event == 'Right:39': print('Right') if event == 'Down:40': print('Down') window.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

# これを実行して print(f"event='{event}', code={ord(event[0])}, values={values}\n") # 出力されたもの event='Left:2063660802', code=76, values={0: (None, None)} event='Up:2113992448', code=85, values={0: (None, None)} event='Right:2080438019', code=82, values={0: (None, None)} event='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文のところは何も起こりませんでした。
そもそも先に試したコードでキーコードっぽいものを出力できているので、セキュリティの問題ではなさそうだと感じました。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

shamsham

2022/09/27 17:21

キーコードが文字列ではなく数値ということはないのでしょうか。 つまり、条件文に '76' などではなく 76 と数字で入力してもうまくいきませんか?
Cocode

2022/09/27 17:59 編集

ご協力ありがとうございます!やってみましたがダメでした。 print(type(ord(event[0]))) で型を確認してみたところ <class 'int'> が出力されたので、数値であるということは当たっているようです! (後からみてくださる他の回答者様のために、「調べたこと、試したこと」に数値としての76を追記しました)
shamsham

2022/09/27 18:02

問題のコードを見てみると、if分の条件で、event と比べているようですが、 実際に比べるのはキーコードなので、ord(event[0]) などではないでしょうか。
Cocode

2022/09/27 18:12

ord(event[0]) == 76 でいけましたありがとうございますー!!!!!!!どうして教材通りの記述方法だとうまくいかないのかという問題は残っていますが、とりあえず動くものができて嬉しいです。ありがとうございます。
Cocode

2022/09/27 18:14

よければこのコメント欄ではなく、回答として投稿してもらえませんでしょうか?ベストアンサーに選ばせていただいて、この質問を完了させたいです!
shamsham

2022/09/27 18:15

わかりました! そうさせていただきます。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。