Geometry Manager
請先閱讀 "骨架程式" 單元當中介紹 geometry manager 的部分.
本頁中單獨的大寫字母代表使用者自行決定的視窗 (W), 距離 (D), 比值 (R), ...
- 範例程式
-
Gridder
-
想像用縱橫交錯的直線把 master 分割成 (大小不一定相等)
的小方塊, 把 slaves 依照指定行列的方式放入它的
master widget 中. (如果沒有用下面的參數指定的話) 同一句 grid
命令當中提到的所有 slaves 放在同一列; 每句新的 grid
命令依序指定 master 中的下一列. 左上角為第 0 列第 0 行.
- -row N: 指定要把 slaves 放在第 N 列
- -column N: 指定要把 slaves 放在第 N 行
- -sticky A: 讓 slave 在 gridder 給它的空間中向 A 側延展, 或水平/垂直/全部填滿 gridder 給它的空間.
- -rowspan N: 讓 slave 佔有的範圍往右延伸, 共佔 N 列.
- -columnspan N: 讓 slvae 佔有的範圍往下延伸, 共佔 N 行.
-
使用 grid 的設計步驟:
- 找出畫面上各行列的 "最大公因數" (獨佔一格的小元件可視為佔滿整格)
- 根據各元件的左上角行列數指定其坐標.
- 用 grid configure 的 -rowspan 與 -column span 將需要放大的元件往右下角延伸.
- 用 grid columnconfigure ... -weight ... 與 grid rowconfigure ... -weight ... 來設定: 上層視窗放大時, 各行列應該以何種比例放大? (提示: 如果希望所有小方格按照比例放大, 可將各行列的 weight 比值設定成與原來自然大小的比值一樣.)
- 建立 label 或 entry 時, -width 選項的單位是字元數, 往往和 Tcl/Tk 程式中其他的長度單位不同. 解決辦法之一是使用 grid 的 columnconfigure -minsize 或 rowconfigure -minsize
- grid forget W: 把 W 從其 master 中完全移除, 彷彿不曾有過這個 slave 一樣.
- grid remove W: 把 W 從其 master 中暫時移除, 但 gridder 依舊記得 W 原來的位置, span 的行列數, sticky 的方向, ... etc. 下次再被 grid 進去時, 不必再指定這些值.
- grid info W: 看看 W 與其 master 的關係. 傳回值為字串, 正好可以給 grid configure 當做參數.
- grid slaves W: 看看 W 有那些 slaves.
-
參考資料:
- Mark Harrison & Michael McLennan. Effective Tcl/Tk Programming. Addison-Wesley.
- Eric Foster-Johnson. The Grid Layout Manager
- Brent Welch. The Grid Geometry Manager
- (我個人的結論) gridder 比 packer 容易用...
以下尚未改寫完成...
-
想像用縱橫交錯的直線把 master 分割成 (大小不一定相等)
的小方塊, 把 slaves 依照指定行列的方式放入它的
master widget 中. (如果沒有用下面的參數指定的話) 同一句 grid
命令當中提到的所有 slaves 放在同一列; 每句新的 grid
命令依序指定 master 中的下一列. 左上角為第 0 列第 0 行.
-
Placer
-
place W ... 或是 place configure W ...
把 W 這個 widget 依照指定座標的方式放入它的 master widget中 (通常即是它的 parent widget).- -x D: 讓 W 的某一角離 master 的左緣 D
- -y D: 讓 W 的某一角離 master 的上緣 D
- -relx R: 讓 W 的某一角離 master 的左緣 R (以 master 的寬度為 1)
- -rely R: 讓 W 的某一角離 master 的上緣 R (以 master 的高度為 1)
- -anchor A: 所謂的 "某一角" 即是指 A. (可以是 nw, n, ne; w, c, e; sw, s, se)
- -width D: 要求 W 變成 D 這麼寬
- -height D: 要求 W 變成 D 這麼高
- -relwidth R: 要求 W 變成 R 這麼寬 (以 master 的寬度為 1)
- -relheight R: 要求 W 變成 R 這麼高 (以 master 的高度為 1)
- place forget W: 把 W 從其 mater 中移除.
- place info W: 看看 W 與其 master 的關係. 傳回值為字串, 正好可以給 place configure 當做參數.
- place slaves W: 看看 W 有那些 slaves.
-
place W ... 或是 place configure W ...
-
作業:
- 寫一個計算機, 外觀如圖. 注意放大時的外觀應如 此圖. 參考答案 (只有外觀, 沒有功能) 可在本頁的 source 中找到.
- 寫一個智慧盤遊戲 (m*n 的棋盤上有 1 到 mn-1 這些數字, 及一個空格. 程式把棋盤打亂; 操作者把數字排回去, 但只有空格旁的數字可以移動.)
- 設計一個程式說明矩陣的乘法 ( A*B=C 當中, C 的第 i 列第 j 行元素, 是 "A 的第 i 列與 B 的第 j 行對應元素相乘" 之總和.)
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/tk/geommgr.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。