sdl2.ext.UIFactory(sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)).from_color(sdl2.ext.TEXTENTRY, color=sdl2.ext.Color(0,0,0), size=(100,50))
成果物
PySDL2.GUI.TextEntry.201711211219
開発環境
- Linux Mint 17.3 MATE 32bit
- SDL2 2.0.2
- pyenv 1.0.10
参考
PySDL2のUI
以下の3種類しかない。すべてsdl2.ext.Sprite
の拡張らしい。
- BUTTON
- CHECKBUTTON
- TEXTENTRY
GUIライブラリではないので期待しないほうが良さそう。
TEXTENTRY
TEXTENTRY
は以下の問題点によりまったく使えない。これはひどい。
- そもそも文字列が表示されない
- IMEが無効になり日本語変換できない
テキスト入力UIとしての最低限の機能すら満たせていない。それどころか、ラベルUIとしての役割すらできていない。これはGUIではない。
生成
sdl2.ext.UIFactory(sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)).from_color(sdl2.ext.TEXTENTRY, color=sdl2.ext.Color(0,0,0), size=(100,50))
イベント捕捉
def onInput(ui, event): print("Input: ", ui, event) print(event.text.text) def onEditing(ui, event): print("Editing: ", ui, event) entry = uifactory.from_color(sdl2.ext.TEXTENTRY, color=GREY, size=(300,50)) entry.input += onInput entry.editing += onEditing
キー入力すると、そのキーのアルファベットが取得できる。全体のテキストは取得できない……。
Input: SoftwareSprite(size=(300, 50), bpp=32) <sdl2.events.SDL_Event object at 0xb2877ecc> b'k'
editing
参考文によると、IME入力変換に反応できるかのようなことが書いてある。
Text editing events are however only raised, if an IME system is involved, which combines glyphs and symbols to characters or word fragments.
どうすればいいのか不明……。コード例も無い。
所感
PyGameからPySDL2に移行したのは、日本語入力できるらしいと知ったからだった。しかし、無常にも不可能であるとの現実をつきつけられてしまった……。
情報はPyGameのときよりも激減するし、設計もダサい。もうPySDL2に触るのが嫌になってきた。