Tcl/Tk 是Xwindows下比較流行的制作圖形界面的軟件之一,與GTK, QT相比,在
軟件編寫和調試上比較有優勢. 另外也具有很強的擴展功能. 用戶可以自己書寫
函數和編寫各種庫. 現在已經有PerlTk和Python利用Tcl/Tk 的擴展功能來實現
圖形功能.
當然,Tcl/Tk本身也有不足之處,原因之一是語法太過於free,有些接近 korn shell
和perl 5. 另外一個明顯的缺點是眾多script語言都具有的運行速度慢的問題.
我嘗試了不同的解釋器並采用中文界面和英文界面來對比,發現通常Tcl/Tk的運行
速度是Perl 5的一半左右,如果要調用中文界面,那麼速度大大受影響.
即使如此,Tcl/Tk也是在Unix/Linux下開發中文圖形界面的理想選擇之一.
下面介紹如何漢化Tcl/Tk:
1) 當前的tcl最新版本是tcl8.3.4,從tcl 8.1起都已經加入了i18n的支持.
但也許因為中文軟件發展緩慢,tcl 8.1始終不能支持中文. tcl 8.1裡
有關語言的部分在 unix/tclUnixInit.c 裡定義. 比如裡面的日文部分:
{"japanese.sjis", "shiftjis"},
{"japanese.eUC", "euc-jp"},
{"japanese-sjis", "shiftjis"},
{"japanese-ujis", "euc-jp"},
但是缺少中文, 那麼在 {NULL, NULL} 之前加上中文支持:
{"zh_CN", "euc-cn"},
{"zh_CN.gbk", "euc-cn"},
{"zh_CN.gb2312", "euc-cn"},
這樣重新編譯 tcl, 將得到的tclsh 覆蓋系統的tclsh .在這樣的情況下 tclsh
可以在中文 locale下運行. 而通常安裝的tclsh 不能在中文locale 下運行:
setenv LC_ALL zh_CN
~$ tcl
tcl>
同樣, wish 也可以在 zh_CN 下運行.
2 ) tclsh可以在中文 locale下運行還不能直接寫帶有中文的腳本, 例如下面
的話就是建立一個按鈕:
button .b -text "按鈕" -command exit
pack .b
這樣的按鈕一定是亂碼, 那麼配置上中文字體也不能解決顯示問題:
.b config -font hanzigb16fs
解決辦法只有一個, 利用tclsh已經提供的 encoding 功能, 例如先將
"按鈕" 轉換成 euc-cn 代碼,然後就可以顯示了. 例如:
#!/usr/bin/wish -f
set a [encoding convertfrom euc-cn "按鈕" ]
button .b -text $a -command exit -font hanzigb16fs
pack .b
這樣就創建了一個中文的按鈕.
至此,中文的顯示問題已經全部解決, 利用Tcl/Tk ,我將 cdict
建立了一個圖形界面, 可以實現cdict 的基本功能. 地址:
http://luliang.dhs.org/luliang/tcltk/tcltk.jpg
寫這個界面大約花了幾十分鐘, 而且我也不是很擅長寫程序,可見Tcl/Tk界面
功能的強大.
3) 前幾天我在另外一文中指出可以采用 unioncode 來解決, 可是實踐證明
不是一個好的辦法,雖然可以繞過許多問題但是本身要找到 unioncode 就不太
方便.
button .b -text "\u592a\u9177"
pack .b
就此打住,等我有空了會將最新的tcl/tk 連通漢化版本極其 cdict 和這個
簡單的界面打包供下載.