2

所以我正在使用 TCL/TK 制作一个界面,但我遇到了一个奇怪的问题,如下图所示。左侧的两个框架(红色)以相同的方式制作。标签应该贴在 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

我的图形用户界面

4

1 回答 1

3

问题是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

试试看!找出最适合您的方法并使用它。

于 2013-03-20T20:48:52.457 回答