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的作用。如果是-sticky s则按钮不会放大,如果需要在窗口底部放置“确定”“取消”按钮,则用-sticky s,而不是-sticky nsew。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值