Все виджеты 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
в остальной части вашего графического интерфейса (ваша кнопка для переключения отображения второго списка таблиц и т. д.)
person
Donal Fellows
schedule
25.10.2011