调整表格列表的大小

时间:2011-10-23 17:15:51

标签: widget tcl dynamic resize tk

我可以在不重新创建窗口小部件的情况下调整表格列表吗?

我有两个tablelist小部件(每个都是一个网格)。 一个始终显示,另一个隐藏,直到您按下按钮。 当同时显示第二个表列表时,我想将第一个表格调整为行数的一半(出于屏幕可读性的原因)。 然后,如果你关闭第二个表列表,我会将第一个表格返回到原始高度(初始行数)。 我怎么能实现这个目标? (注意:问题主要在于是否可以动态调整nemethi的表格列表。)

1 个答案:

答案 0 :(得分:2)

所有Tk小部件都有一个他们更喜欢的尺寸,但可以应对不到这个。所以我们需要利用这一点。

你有一个容器(一个顶层或可能是一个框架),它将包含两个tablelist小部件(或者当只有一个是要显示的时候只有一个)。添加第二个表列表时,我们希望保持整个容器的大小相同。最简单的方法是使用place几何管理器 - 在这种情况下,特别是它的相对位置和大小调整控件 - 因为这样可以更精确地控制小部件大小。 (缺点是你自己做一些工作来获得正确的初始小部件尺寸。)

在下面的代码中,我假设容器小部件名为.container,主小部件名为.container.main,额外名称为.container.extra。设置:

place .container.main
bind .container.main <Configure> {initMainSize %W %w %h}
proc initMainSize {widget width height} {
    # Set up the container preferred size
    [winfo parent $widget] configure -width $width -height $height
    # Install the real placement rules for the main widget
    place configure $widget -relx 0 -rely 0 -relwidth 1 -relheight 1
    # Run this only once, so remove the binding here
    bind $widget <Configure> {}
}

如何添加.container.extra

# Extra widget to take bottom half of container; main relegated to top half
place .container.extra -relx 0 -rely 0.5 -relheight 0.5 -relwidth 1
place configure .container.main -relheight 0.5

如何删除.container.extra

# Extra widget dropped (but still logically exists); main back to full size
place forget .container.extra
place configure .container.main -relheight 1

另请注意,由于使用place的技巧普遍增加,您最好尽可能少地使用它;使用它然后pack / grid进入GUI的其余部分(用于切换显示第二个表列表的按钮等)