Метка внутри рамки не будет выравниваться одинаково

Итак, я делаю интерфейс, используя 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

мой графический интерфейс


person Leo    schedule 20.03.2013    source источник


Ответы (1)


Проблема в том, что менеджер геометрии 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

Попробуйте их! Найдите то, что работает лучше всего для вас, и используйте это.

person Donal Fellows    schedule 20.03.2013