Почему упаковка этикетки в рамке влияет на ее размер?
Потому что так устроен упаковщик.Он будет уменьшаться или увеличиваться в соответствии с его содержимым, что вам нужно в 99,99% случаев.
Каноническая документация о том, как работает pack
, приведена в официальной документации по tcl / tk здесь:
Алгоритм упаковщика
И каков наилучший способ избежать этой проблемы и зафиксировать все по размеру, как они установлены?
Лучшее ожидание, чтобы избежать этой "проблемы", это использовать place
.Однако то, как работают pack
и grid
, делает намного проще, чем использование place
для создания адаптивного пользовательского интерфейса, который может обрабатывать изменения размера шрифта, разрешения и изменения размера окна пользователем вручную..
За более чем пару десятилетий написания графических интерфейсов для Python / tkinter и tcl / tk я никогда не использовал place
, за исключением крайне особых обстоятельств.Его просто слишком сложно использовать для обязательных распространенных макетов.
Если вы абсолютно настаиваете на использовании pack
или grid
без этого поведения "сжать, чтобы соответствовать", вы можете передать ложное значение в pack_propagate
или grid_propagate
метод содержащего кадра (например: self.pack_propagate(False)
).По моему опыту это очень редко правильное решение.