TCL幾何管理

TCL用了有段時間,但是都是複製別人代碼做的UI,每次要用的時候都是重新看,或者瞎改,實際上自己對幾何管理器還是不懂。

今天看了一下,做下總結:

(1)grid不能控制組件尺寸一樣,但pack可以(就目前所知):

labelframe .f -text "haha"

button .ok -text ok

button .cancel -text cancel

button .help -text help

#增加“-expand 1 -fill both ”,則隨着窗口尺寸變大,.f從組件(按鈕)尺寸變大

pack .ok .cancel .help -in .f -side top -padx 12m -pady 1m -expand 1 -fill both

grid .f -sticky news

grid rowconfigure . 0 -weight 1

grid columnconfigure . 0 -weight 1

代碼說明:

只有pack有-expand和-fill,expand將當前要打包的組件塊區填滿當前剩餘的空間,fill將組件窗口填滿組件塊區,一般兩個選項一起使用; -side top表示從上往下排列組件;-padx爲外部補白,如果設置-side left,則效果如下:

12m表示12毫米,如果沒有m則表示像素;

grid .f -sticky news將.f交給幾何管理器,如果沒有這條語句則不會顯示組框.f和裏面的按鈕,-sticky news指定了.f在它的單元格中全範圍分佈,因爲總共只有1個單元格,所以.f就充滿整個窗口了;

grid rowconfigure . 0 -weight 1將主窗體.的從組件(只有一個.f)設置爲隨窗體尺寸變化,當有多個從組件均設置了weight時,值越大尺寸佔比例越大;這裏如果不設置則手動改變窗體尺寸時,組框.f的大小不變。

(2)書本中<TCL/YK入門經典>的例子:

#.demo 按鈕隨着勾選nsew會變大變小,若勾選全部,則佈滿單元格

button .demo -textvariable stickyLabel -bd 2 -relief raised

checkbutton .n -text "n" -bd 2 -relief raised \

-variable stickyN -onvalue n -offvalue {} \

-command redo_sticky

checkbutton .s -text "s" -bd 2 -relief raised \

-variable stickyS -onvalue s -offvalue {} \

-command redo_sticky

checkbutton .e -text "e" -bd 2 -relief raised \

-variable stickyE -onvalue e -offvalue {} \

-command redo_sticky

checkbutton .w -text "w" -bd 2 -relief raised \

-variable stickyW -onvalue w -offvalue {} \

-command redo_sticky

 

grid .demo -row 1 -column 1

grid .n -row 0 -column 1 -sticky nsew

grid .s -row 2 -column 1 -sticky nsew

grid .e -row 1 -column 2 -sticky nsew

grid .w -row 1 -column 0 -sticky nsew

 

grid rowconfigure . 1 -weight 1

grid columnconfigure . 1 -weight 1

 

wm geometry . 180x100

 

proc redo_sticky {} {

global stickyN stickyS stickyE stickyW stickyLabel

append s2 $stickyN $stickyS $stickyE $stickyW

grid .demo -row 1 -column 1 -sticky $s2

set stickyLabel [list -sticky $s2]

}

代碼說明:

結果:

 

 

中間按鈕尺寸變大了,可見-sticky nsew的作用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章