teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

半角/全角キーについての記述を追加

2021/01/29 12:48

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -1,9 +1,14 @@
1
1
  変換キーを押したとき`key`で得られる値は0 (unknown key)になるので、`event.key`では判定できません。
2
+ 半角/全角キーを押したとき`key`で得られる値は96 (K_BACKQUOTE)です。英語キーボードで`` ` ``がある位置だからですかね。
2
3
 
3
- `scancode`でスキャンコードが得られるので、そちらを使ってください。質問文のコードであれば、`event.scancode`の値が、変換キーでは121になります(Windowsの場合)。
4
+ 対策ですが、`scancode`でスキャンコードが得られるので、そちらを使ってください。質問文のコードであれば、`event.scancode`の値が、変換キーでは`121`、半角/全角キーでは`41`になります(Windowsの場合)。
4
5
 
6
+ なお、(今回は関係ないですが)文字を得るためなら`event.unicode`を使います。
7
+
5
8
  ```Python
6
9
  if event.type == pygame.KEYDOWN:
7
10
  if event.scancode == 121:
8
11
  print("変換")
12
+ elif event.scancode == 41:
13
+ print("半角/全角")
9
14
  ```

2

無変換は対象外だったので除外

2021/01/29 12:48

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -1,11 +1,9 @@
1
- 変換キー、無変換キーもに`key`で得られる値は0 (unknown key)になるので、`event.key`では判定できません。
1
+ 変換キーを押した`key`で得られる値は0 (unknown key)になるので、`event.key`では判定できません。
2
2
 
3
- `scancode`でスキャンコードが得られるので、そちらを使ってください。質問文のコードであれば、`event.scancode`の値が、変換キーでは123、変換キーでは121になります(Windowsの場合)。
3
+ `scancode`でスキャンコードが得られるので、そちらを使ってください。質問文のコードであれば、`event.scancode`の値が、変換キーでは121になります(Windowsの場合)。
4
4
 
5
5
  ```Python
6
6
  if event.type == pygame.KEYDOWN:
7
- if event.scancode == 123:
7
+ if event.scancode == 121:
8
- print("無変換")
9
- elif event.scancode == 121:
10
8
  print("変換")
11
9
  ```

1

コードを追加

2021/01/29 12:35

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -1,3 +1,11 @@
1
1
  変換キー、無変換キーともに`key`で得られる値は0 (unknown key)になるので、`event.key`では判定できません。
2
2
 
3
- `scancode`でスキャンコードが得られるので、そちらを使ってください。質問文のコードであれば、`event.scancode`の値が、無変換キーでは123、変換キーでは121になります(Windowsの場合)。
3
+ `scancode`でスキャンコードが得られるので、そちらを使ってください。質問文のコードであれば、`event.scancode`の値が、無変換キーでは123、変換キーでは121になります(Windowsの場合)。
4
+
5
+ ```Python
6
+ if event.type == pygame.KEYDOWN:
7
+ if event.scancode == 123:
8
+ print("無変換")
9
+ elif event.scancode == 121:
10
+ print("変換")
11
+ ```