[推荐] 讓 pygame 支援「全螢幕下」中文輸入/댠…
其實是小弟自己做的東西啦 ^^;
pygame [http://www.pygame.org/] 是個把 SDL [http://www.libsdl.org/] 包起來,
讓 Python 輕快實驗、寫遊戲的好東西 (正如其名 XD )
但先前有個不太方便的地方,那就是「完全不支援 IME」
也就是說「沒辦法輸入中文、日文」 ...
但是 Jserv 與 dr.courage 做了 SDL-IM [http://sdl-im.csie.net/] 這個好東西
直接從 SDL 底層支援「跨平台」 IME 機制
使得在 pygame 裡面輸入中文不再是個夢想!感謝這兩位強者的貢獻 ;)
由於小弟最近想寫一點東西,實在不想等姍姍來遲的 pygame 1.8
因此直接編譯 SDL-IM 修改過的 SDL 版本
接著修改 pygame 1.7.1 版加上新的 IME 相關功能,順便配合 Python 2.5 編譯
這樣就不必為了寫東西而同時安裝 Python 2.4/2.5 了 ;)
若您想自己編譯 SDL 1.2.8 的話
要小心最新版的 SDL_image/mixer/ttf 可能會沒辦法配合 SDL 1.2.8 的舊介面
這邊使用的是 SDL_image-1.2.4, SDL_mixer-1.2.6 與 SDL_ttf-2.0.8。
下面是給 Python 2.5 用的 pygame 與 Numeric 安裝檔,內含所有相依檔案:
http://mail.cs.nchu.edu.tw/~s9256043/Numeric-24.2.win32-py2.5.exe
http://mail.cs.nchu.edu.tw/~s9256043/pygame-1.7.1release.win32-py2.5.exe
Numeric 是 pygame 快速 surfarray 不可或缺的幫手
沒了它,要玩高速繪圖就會變得很有難度了
所以也一起幫 Python 2.5 做了一份安裝檔。
這份 pygame 裡面用的 freetype 有把 bytecode interpreter 打開
所以有授權考量的人請自行迴避 :p
另外 SDL_ttf 也在載入 glyph 的地方加了忽視全域寬度的選項
如此在應用「某些現成字型」的時候會比較快樂一點 ;)
以下是 pygame 的 patch 檔以及增改的 API 部分:
http://mail.cs.nchu.edu.tw/~s9256043/pygame-1.7.1-sdl_im.diff
> pygame.font.Font(filename, size, index=0): return Font
> pygame.font.Font(object, size, index=0): return Font
就是把 SDL_ttf 原本就有的 index 放出來而已,這個引數的用途有兩個。
第一個是在使用 .ttc 字型的時候指定要用集合內的哪個字型
比如說在打開 mingliu.ttc 的時候
指定 0 會拿到定寬的細明體
指定 1 會拿到比例間距的新細明體。
第二個是在使用 .fon 字型的時候會拿到哪種點陣圖
比如說在使用 Dina prgoramming font [http://0rz.tw/972mS] 的時候
0~3 分別對應 8 點大小的標準、斜體、粗體、粗斜體
4~7 分別對應 9 點大小的標準、斜體、粗體、粗斜體等等。
> python.event.set_im_flip(bool)
> python.event.get_im_flip()
> python.event.set_im_pos(pos)
這三個就是 IME 的重頭戲了!
呼叫 set_im_flip(1) 之後
IME 組字視窗在 pygame SDL 主視窗描繪完之後會跟著重繪一次
顯示在 pygame SDL 主視窗上面!
同時用 set_im_pos() 可指定 IME 組字視窗「左上角」在 pygame SDL 視窗內的相對位置
get_im_flip() 當然是取得目前重繪狀態的時候用的。
從輸入法收到的資料則如下圖所示:
http://mail.cs.nchu.edu.tw/~s9256043/070207-zhinput.png
中間有許多 key = 0、unicode 沒內容的 KeyDown 事件
這些是被 IME 處理掉的按鍵;
輸入完成之後則有一個 key = 0、unicode 是組字結果的 keyDown 事件
(那邊顯示的碼是「中文輸入」)。
值得注意的是切換 IME 的組合鍵 (ctrl+space 按下放開)、
輸入完畢之後的輸入鍵 (之後緊接的 key = 13, unicode = u'\r')
要自己想辦法處理掉。
下面這是改好的 eventlist.py 測試檔,全螢幕模式並支援輸入法
輸入法組字視窗會跟著滑鼠游標移動:
http://mail.cs.nchu.edu.tw/~s9256043/eventlist.py
您可以輸入一段文字但不確認 (按下 Enter),然後在這個狀態下移動滑鼠試試看 ... ;)
==
最後還是要感謝 SDL-IM 的作者!小弟來去寫「原本想寫的東西」了 ... (嘿嘿)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.44.151
推
10/28 06:12, , 1F
10/28 06:12, 1F
Python 近期熱門文章
PTT數位生活區 即時熱門文章