0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Pygame】TEXTEDITINGイベントの文字数制限を超えて入力を受け取る方法

Last updated at Posted at 2024-10-17

結論

環境変数SDL_HINT_IME_SUPPORT_EXTENDED_TEXTを"1"に設定する。
制限を超えた分は複数のイベントに分けて送信されるので、それを処理する。

解説

Pygameでテキスト入力を実現するには、入力の内容をTEXTINPUT、TEXTEDITINGイベントから取得するのが一般的です。
TEXTEDITINGイベントでは、pygame.event.get()で取得したEventオブジェクトにtext(入力テキスト), start(入力の編集カーソル位置), length(編集カーソル位置からの編集文字数)属性が設定され、TEXTINPUTイベントでは、text属性にTEXTEDITINGで入力した内容が格納されます。

SDL_HINT_IME_SUPPORT_EXTENDED_TEXTとは?

初期状態では、 SDL_TEXTEDITINGEVENT_TEXT_SIZEという環境変数で保持できるテキストのサイズがあらかじめ設定されており、サイズはchar(1バイト) × 32ですから、それを超える分の入力は確定しても捨てられます。(UTF-8の日本語は一文字3バイト、ほぼ使われないが最大4バイトの文字まで定義されている)
これを事実上解除する設定がSDL_HINT_IME_SUPPORT_EXTENDED_TEXTというわけです。

仕様

SDL_HINT_IME_SUPPORT_EXTENDED_TEXT="1"では、TEXTEDITINGイベントのtext属性で SDL_TEXTEDITINGEVENT_TEXT_SIZEを超える分は、複数回のTEXTINPUTイベントに分けて送信されることになります。
pygame_textediting_textinput_event_example.gif

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?