的Tcl / Tk:调整时帧胡作非为。(Tcl/Tk: Frames misbehave when

2019-10-17 02:25发布

我是比较新的的Tcl / Tk,但一直与它的工作相当成功,不停的最后几个星期。 在大多数情况下它似乎相当简单。 不过,我最近打了障碍这可能是简单,但我似乎无法弄清楚。

我已经减少了我相当复杂的代码,其说明问题的几行。

我简单的例子产生两个labelframes在每一个简单的标签控件。 当我调整(即,扩大)主窗口中,我想“左”帧到仅在y方向上调整,我想“中间”帧到在x和y调整大小。 这些部件工作正常。

不过,我也想调整大小时帧保持“粘”在一起。 也就是说,我想要的“中间”框留卡住了反对“左”的框架时,他们都调整。 相反,我看到了两者之间不断扩大的缝隙。

再次,这是从一个更复杂的程序代码的简化位。 我试图避免在同一程序中混合栅格和包命令,并在原来的更复杂的程序,使用网格变得非常笨重。 因此,使用“包”的解决方案将是首选。 但是,适当的解释将是一个良好的开端。

我的小例子:

 #!/usr/bin/wish

 ## Set up two main frames
 set frameLeft [labelframe .frameLeft]
 set frameMiddle [labelframe .frameMiddle]

 pack $frameLeft -fill y -expand 1
 pack $frameMiddle  -fill both -expand 1 
 pack $frameLeft $frameMiddle -side left -anchor nw

 ## Instead of the previous 3 lines, I also tried:
 #pack $frameLeft -fill y -expand 1 -side left -anchor nw
 #pack $frameMiddle  -fill both -expand 1 -side left -anchor nw

 ## Set up component in LEFT frame
 set frameOne [labelframe $frameLeft.frameOne]
 set labelOne [label $frameOne.labelOne -text "Label One:"]

 pack $labelOne -anchor nw
 pack $frameOne -anchor nw

 ## Set up component in MIDDLE frame
 set frameTwo [labelframe $frameMiddle.frameTwo]
 set labelTwo [label $frameTwo.labelTwo -text "Label Two:"]

 pack $labelTwo -side left
 pack $frameTwo -anchor nw

Answer 1:

首先,它在调试一个复杂的布局提上帧花哨的颜色时,经常帮助。 当然,你不会离开他们在生产,但它确实让了解你使用更简单的几何管理器的行为。

当我尝试你的代码,我看到两个小部件都被分配在水平方向上的空间相同的数量; 所述.frameLeft然后插件被粘到该空间,而左侧.frameMiddle插件正在填写已分配的空间。 所以,问题不在于他们的“太空包” 的小部件的行为,而是分配空间。

现在,随着pack ,额外空间的分配由控制-expand选项; 额外的房间有他们启用扩展包之间共享。 这意味着,要得到你想要的布局,您应该根本就没有设置-expand 1.frameLeft



Answer 2:

据我所知,你喜欢一个“包”的答案,但电网通常是很容易处理,因为“粘”选项,在处理更容易填充和扩展处理语义。 我说您有相关的麻烦有点意外。 不幸的是,我被锁入“网格” -think。 正因为此,在下面的“网格”的解决方案你在找什么?

#!/usr/bin/env wish

## Set up two main frames
set frameLeft [labelframe .frameLeft]
set frameMiddle [labelframe .frameMiddle]

grid $frameLeft -row 0 -column 0 -sticky nse
grid $frameMiddle -row 0 -column 1 -sticky nsew
grid columnconfigure . {0 1} -weight 1
grid rowconfigure . 0 -weight 1

## Set up component in LEFT frame
set frameOne [labelframe $frameLeft.frameOne]
set labelOne [label $frameOne.labelOne -text "Label One:"]

grid $frameOne -sticky nw
grid $labelOne -sticky nw

## Set up component in MIDDLE frame
set frameTwo [labelframe $frameMiddle.frameTwo]
set labelTwo [label $frameTwo.labelTwo -text "Label Two:"]

grid $frameTwo -sticky nw
grid $labelTwo -sticky nw


文章来源: Tcl/Tk: Frames misbehave when resizing.
标签: tcl tk