骨架程式
這一篇講義的 framework 範例程式是一個骨架, 一個空殼子, 可以拿來當做其他程式的基礎。
framework | |
tcl 版 | v |
nis 版 | v |
nis/mbvk 混合版 | v |
mbvk 版 | v |
本篇講義尚未整理
- 範例程式:
-
從 widgets 的產生途徑看 widgets 之間的關係:
-
若 widget B 是透過 widget A 而產生出來的, 我們就說 A 是 B 的
parent widget; B 是 A 的 child
widget.
tcl perl parent frame .a $a = $mw->Frame; child button .a.b $b = $a->Button; - 在 tcl/tk 中, 一個 widget 的完整名稱叫做它的 path name
(路徑名稱), 例如上例中的 .a.b
這項資訊在 perl/tk 中可以用 pathname 這個 "所有 widget 共有的 method" 取得. (這類共有的 methods 手冊請見 perldoc Tk::Widget) Perl 使用者亦請參考 "如何有系統地給 widgets 命名?" - 當然從 產生途徑 的角度來看, main widget (也就是 tcl/tk 當中的 . 或 perl/tk 當中用 MainWindow 產生的視窗) 就是所有其他 widgets 的老祖宗. 在 path 範例中, 共有祖孫三代.
-
若 widget B 是透過 widget A 而產生出來的, 我們就說 A 是 B 的
parent widget; B 是 A 的 child
widget.
-
從 widgets 佔據的畫面空間看 widgets 之間的關係
-
若 widget B 在畫面上放在 widget A 裡面, 我們就說 A 是 B 的
master widget; B 是 A 的 slave
widget.
誰是誰的 master? 這是由 pack 命令的 -in 參數來決定的.tcl perl statement pack .b -in .a $b->pack(-in=>$a); slave .b $b master .a $a - 如果在 pack 一個 widget W 時不指定 -in 參數, 那麼 W 的 master 就內定為 W 的 parent. 所以說: parent 通常就是 master; child 通常就是 slave. 但是像 masterslave 範例中, 除了 main widget 以外的所有六個 widgets 都是 sibling (兄弟姊妹), 可是其中有兩個為另外四個的 masters.
-
若 widget B 在畫面上放在 widget A 裡面, 我們就說 A 是 B 的
master widget; B 是 A 的 slave
widget.
-
幾個經常使用的副程式 (並不是真正的 widget classes)
- tk_messageBox: 顯示訊息給使用者看, 並傳回使用者按下的鈕. 有好幾種常用的形式, 例如 ok, okcancel, yesnocancel 等等.
- tk_getOpenFile: 讓使用者點選檔案名稱並傳回給呼叫者. 傳回的一定是一個既有的檔案.
- tk_getSaveFile: 讓使用者點選檔案名稱並傳回給呼叫者. 如果使用者選到一個既有的檔案, tk 會問他是否確定要覆蓋這個既有的檔案. (手冊與 tk_getOpenFile 在一起)
- tk_chooseColor: 讓使用者選取顏色並傳回給呼叫者. (tcl 版與 perl 版的畫面差很多)
-
其他:
- 一個好習慣: 讓你的程式處理 "關閉程式主視窗" 這個事件. 像是主視窗這類 toplevel 視窗, 它們是由管理桌面其他應用程式的 window manager 來管理的, 不像一般 tk 內部視窗, 是由 geometry manager 在管理的. 因此要接收 "關閉程式主視窗" 這個事件, 要透過與 window manager 的程式介面. 在 tcl/tk 中用 wm protocol (詳見 man n wm); 在 perl/tk 中用 ->protocol (詳見 perldoc Tk::Wm) 通常處理 WM_DELETE_WINDOW 這個事件很簡單, 可以與處理正常 quit 的選單使用同一個副程式.
- 注意: 建立 widget (或用 configure 修改) 時的 -padx 與 -pady 指的是 widget 內部的額外空間; 而 pack 時的 -padx 與 -pady 指的是 widget 與它的 mater 之間所留的額外空間. 更一般說來, 不論是何種屬性, 用於建立 widget 或 configure 時的, 都是描述 widget 本身的屬性; 而用於 pack 時的, 則是描述它與 master 之間關係的屬性.
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/tk/framework.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。