Tcl/Tk Insight: 布局管理

风行水上 @ 2009-07-04 09:24:33
标签:
    «目录»

    place

    place 是通过指定widget的大小和位置来直接布局。

    button .b -text "Ha Ha"
    place .b -x 10 -y 20 -width 100 -height 50
    # 使用相对大小和相对位置
    place .b -relx 0.3 -rely 0.2 -relwidth 0.8 -relheight 0.6 
    

    这种布局方法思路最直接,却需要用户进行相对较多的计算。尤其是绝对位置的布局不利于描述widget的相对位置,以及组件的自适应布局。下面的"pack"和"grid"布局在这方面则要方便不少。

    但利用绝对定位理论上可以做出任何布局;利用相对定位可以在一个widget内部放置另一个或几个组件。

    参见:Tk "place" 布局实例

    pack

    pack 布局管理器的算法:

    1. 在容器剩下的空间(cavity)中沿着"-side"分割出一块矩形区域(parcel),用于放置当前的widget。以 "-side top" 为例,该矩形的长等于容器的长。高等与widget的高。
    2. 根据"-fill"选项来调整widget的大小以填充矩形区域。如果widget相对较小,根据"-anchor"放置widget到相应位置。
    3. 继续放置下一个widget,直到所有widget放置完毕。
    4. 剩下的空间由标有"-expand"选项的组件进行平分。

    在细节上,可以通过"-padx" "-pady" "-ipadx" "-pady"来调整widget之间的边距。

    button .b -text "Ha Ha"
    text .t 
    pack .b -side top -fill x
    pack .t -side top -fill both -expand 1
    

    grid

    grid是按照行和列来放置widget,比较适合需要对齐widget的情况。

    grid的使用相对复杂一些。

    grid .b -row 1 -column 2 -columnspan 2 
    

    raise & lower

    如果两个组件在屏幕上的位置有重复的话,层次在上人组件会覆盖下面的组件。

    默认情况下,后创建的组件相对层次较高。

    下面两个命令用于调整widget的层次。

    raise .b
    lower .b
    
    标签:

      分享到:
      comments powered by Disqus

      29/32ms