2013-03-20 40 views
2

所以我正在使用TCL/TK接口,我有一个奇怪的问题,如下图所示。左侧的两个框架(红色)以相同的方式制成。标签应stickying到e和w,但你可以看到在第一个帧不安排以同样的方式的标签。标签的框架内将无法对齐相同

我创建这样

labelframe .bswSelfTestFrame -text "BSW Self Test Summary" 
labelframe .bswStatusFrame -text "BSW General Status" 

我收拾这样

pack .bswStatusFrame -in .hkframe -padx 3 -pady 3 -anchor n -expand yes -fill both 
pack .bswSelfTestFrame -in .hkframe -padx 3 -pady 3 -expand yes -fill both 
pack .hkframe -side left -expand no 

框架中的框架和标签

grid .bswStatusFrame.lBSWCurrentMode -in .bswStatusFrame -padx 5 -pady 2 -row 1 -column 1 -sticky w 
grid .bswStatusFrame.vBSWCurrentMode -in .bswStatusFrame -padx 10 -pady 2 -row 1 -column 2 -sticky e 

grid .bswSelfTestFrame.lLEONRAMtestErr -in .bswSelfTestFrame -padx 5 -pady 2 -row 1 -column 1 -sticky w 
grid .bswSelfTestFrame.vLEONRAMtestErr -in .bswSelfTestFrame -padx 10 -pady 2 -row 1 -column 2 -sticky e 

my GUI

回答

3

的PROBL EM是,grid几何管理者不知道如何处理在较低插件的额外的空间做的,所以它集中所有细胞。 (有到差距左,右,但没有在顶部和底部的位置,因为被限制在整体的窗口)。这通常不是什么是真正想要的,但它鼓励你要清楚你想真正得到什么。

最好的解决办法是提名一列接收额外的空间。这个列可以是左边的,也可以是右边的,或者甚至是根本没有小部件的列。必须处理该空间的列应配置为具有非零权重。当他们根据权重分配额外空间时,您也可以给两列非零权重。

# The simplest fix... 
grid columnconfigure .bswSelfTestFrame 1 -weight 1 
# Repeat for all master widgets where you want to fix things 
# The blank-column version... 
grid columnconfigure .bswSelfTestFrame 2 -weight 1 
# Note that *I HAVE CHANGED THE COLUMN OF ONE LABEL* below 
grid .bswSelfTestFrame.lLEONRAMtestErr -in .bswSelfTestFrame -padx 5 -pady 2 -row 1 -column 1 -sticky w 
grid .bswSelfTestFrame.vLEONRAMtestErr -in .bswSelfTestFrame -padx 10 -pady 2 -row 1 -column 3 -sticky e 
# The two-weighted-column version, both with the same weight... 
grid columnconfigure .bswSelfTestFrame 1 -weight 1 
grid columnconfigure .bswSelfTestFrame 2 -weight 1 

# Alternatively, with new enough version of Tk... 
grid columnconfigure .bswSelfTestFrame {1 2} -weight 1 

试出来!找到最适合你的方式并使用它。

+0

由于工作完美:) – Leo 2013-03-21 07:51:34