Tix 擴充套件
(還沒有以 "language independent" 的方式重寫, 請忍耐 ...)
用 Tk 建立 GUI 固然比用 C/C++ 方便, 但它所提供的元件還是稍嫌低階. 「Tix 擴充套件」 提供許多更高階的常用元件 (widgets), 例如 File Dialog Box, Tabbed Notebook 等等, 讓程式設計師可以用更短的程式碼建構出複雜的 GUI.
-
安裝: 如果你的 Linux/BSD CD 上面沒有, 可以到
rpmfind
搜尋 tix. Windows 使用者請至原始網站下載.
- 確定你已安裝 tcl 與 tk 套件 (可檢查 /var/log/packages)
-
取得 與你用的版本相同的 slackware 的 tcl source,
按照其提示 configure 就可以了, 不需要編譯與安裝. 也就是說, 在
tcl8.0/unix 目錄底下:
./configure --prefix=/usr --enable-shared
對 tk 如法泡製. -
取得 Tix 並編譯: 在 .../Tix4.1.0/unix/tk8.0 目錄下:
./configure --prefix=/usr --enable-shared make > & make.log &
-
安裝 Tix: 在上一層目錄 (.../Tix4.1.0/unix) 下:
./configure --prefix=/usr make install > & install.log [必須以 root 的身份]
- 安裝完畢後, 用 root 的身份 ldconfig 以更新系統的動態連結程式庫資訊. 如果你的 shell 是 csh/tcsh, 還要下 rehash.
-
如何學習 Tix: 目前有關 tix 的文件尚未成熟, 必須靠學者自行揣摩.
- 在你的系統的 tix 目錄下找到 widget 這個 demo 程式, 先看看 tix 提供了那些元件可以用.
- 找找看手冊放在那個目錄下, 經常查閱手冊!
- Mark Harrison 的 Tcl/Tk Tools 書中有一單元簡介 Tix.
- 若想學習自己建立新的 widget class, 應經常參考 tix 程式庫下的 tix 內建類別原始碼.
-
簡單使用範例 (取自 Tcl/Tk Tools)
tixControl .lawyers -label "Lawyers:" -max 10 -min 0 .lawyers configure -integer true -step 2 pack .lawyers .lawyers configure -validatecmd evenOnly proc evenOnly {value} { return [expr $value - ($value % 2)] } .lawyers subwidgets -all .lawyers subwidget entry configure -background yellow
-
觀念與術語
- 每個 megawidget (例如上面的 .lawyers) 裡面可能有很多 subwidgets. 手冊中會列出使用者可以用的 subwidget 名稱 (例如 entry). 但是這些列出來的 subwidgets 未必是 mega widget 的直接 children, 所以要靠 megawidget 的 widget command 的 "subwidget" 功能來取得 subwidget 正確的路徑.
- container widgets: 專門用來裝使用者提供元件的這類 "容器形" mega widgets, 例如 NoteBook, PanedWindow, ... 使用 container widgets 時要注意不可把自己的小元件直接放入 container 中, 而要透過 subwidget 功能, 放入 containter 的某個 subwidget 中.
-
- 宣告新類別: 用 tixWidgetClass 命令. 注意 tixWidgetClass 後面的類別名稱與 -classname 後面的類別名稱第一個字母大小寫不同.
- tixWidgetClass 命令各選項的意義: -superclass 繼承自那個類別; -method 將來因此而產生的 widget commands 可以有那些公開的功能 (簡化使用者呼叫的語法); -flag 在產生 widget 或更改 widget 組態時有那些選項可用 (亦即此類 widgets 有那些屬性); -configspec 各屬性的內定值等詳細資料; -alias 屬性的簡稱.
- 三個固定的 widget 起始函數: InitWidgetRec (設定私有變數), ConstructWidget (建立畫面), SetBindings (讓 subwidgets 活起來). 通常第一句話都是 tixChainMethod (想像 OOP 中高階 constructor 會去呼叫低階 constructor).
- 成員函數內一般都用 "upvar #0 $w data" 宣告來取得 "本 widget" 的相關資訊.
- 只要建立 subwidget, 就要在 $data(...) 中登記. 這樣使用者才可以用 widget command 的 subwidget 功能取得各元件. (見 ConstructWidget)
- 處理 configure 的函數: 在相對應的屬性名稱前面加上 "config". 每次屬性值要改變時都會被叫起來.
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/tk/tix.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。