Все виджеты Tk имеют размер, который они предпочли бы иметь, но могут справиться с меньшим. Поэтому нам нужно воспользоваться этим.
У вас есть контейнер (верхний уровень или, возможно, фрейм), который будет содержать два виджета списка таблиц (или только один из них, когда должен отображаться только один). Когда добавляется второй список таблиц, мы хотим сохранить размер общего контейнера одинаковым. Самый простой способ сделать это - использовать диспетчер геометрии place
- в данном случае, особенно его относительное расположение и элементы управления размерами, - так как это позволяет более точно контролировать размеры виджетов. (Недостатком является то, что у вас есть , чтобы выполнить некоторую работу самостоятельно, чтобы получить правильные начальные размеры виджетов.)
В приведенном ниже коде я предполагаю, что контейнерный виджет называется .container
, основной виджет называется .container.main
, а дополнительный - .container.extra
. Чтобы настроить вещи:
place .container.main
bind .container.main <Configure> {initMainSize %W %w %h}
proc initMainSize {widget width height} {
# Set up the container preferred size
[winfo parent $widget] configure -width $width -height $height
# Install the real placement rules for the main widget
place configure $widget -relx 0 -rely 0 -relwidth 1 -relheight 1
# Run this only once, so remove the binding here
bind $widget <Configure> {}
}
Как добавить .container.extra
:
# Extra widget to take bottom half of container; main relegated to top half
place .container.extra -relx 0 -rely 0.5 -relheight 0.5 -relwidth 1
place configure .container.main -relheight 0.5
Как удалить .container.extra
:
# Extra widget dropped (but still logically exists); main back to full size
place forget .container.extra
place configure .container.main -relheight 1
Также обратите внимание, что из-за общей повышенной хитрости использования place
лучше использовать его для как можно меньшего количества виджетов; используйте его на кадре, который вы затем pack
/ grid
добавляете в остальную часть вашего графического интерфейса (ваша кнопка для переключения отображения второго списка таблиц и т. д.)