我可以在不重新创建窗口小部件的情况下调整表格列表吗?
我有两个tablelist小部件(每个都是一个网格)。 一个始终显示,另一个隐藏,直到您按下按钮。 当同时显示第二个表列表时,我想将第一个表格调整为行数的一半(出于屏幕可读性的原因)。 然后,如果你关闭第二个表列表,我会将第一个表格返回到原始高度(初始行数)。 我怎么能实现这个目标? (注意:问题主要在于是否可以动态调整nemethi的表格列表。)
答案 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的其余部分(用于切换显示第二个表列表的按钮等)