Опция липкой сетки не сжимает ведомого

Я пытаюсь создать графический интерфейс, содержащий три холста.

Представление, которое я хочу создать, выглядит следующим образом:

--------------------------------------------
|    |                                |    |
|    |                                |    |
|    |                                |    |
|    |                                |    |
--------------------------------------------

Два узких полотна слева и справа и одно большое полотно в центре. Это мой код:

#!/bin/sh  
# \
exec wish "$0" 

canvas .lib
canvas .lef -background "black"
canvas .lay

grid .lib -row 0 -column 0 -sticky ns 
grid .lef -row 0 -column 1 -sticky nsew
grid .lay -row 0 -column 2 -sticky ns

# Added as proposed by Donal Fellows
grid columnconfigure . 1 -weight 1

Но вместо описанного выше порядка я получаю все холсты одного размера.

холсты


person Roman Kaganovich    schedule 21.01.2015    source источник
comment
Можете ли вы явно задать ширину холстов?   -  person Jerry    schedule 21.01.2015
comment
Это то, что я получу, если укажу ширину холста (например, canvas .lib -row 0 -column 0 -sticky ns -width 100 середина на 500 и справа на 100).   -  person Jerry    schedule 21.01.2015
comment
Да! это сделало работу. Спасибо, Джерри!   -  person Roman Kaganovich    schedule 21.01.2015
comment
@ Джерри, я думаю, вы можете отправить свой комментарий как ответ, чтобы я мог пометить его как отвеченный.   -  person Roman Kaganovich    schedule 22.01.2015


Ответы (2)


Если вы не «исправляете» ширину столбцов для холстов, вы можете установить определенную ширину с помощью параметра -width при создании холста:

canvas .lib -width 100
canvas .lef -background "black" -width 500
canvas .lay -width 100

И со всем остальным то же самое, что я получаю:

введите здесь описание изображения

Если вы хотите позже изменить ширину холста, вы, конечно, можете использовать что-то вроде .lib configure -width 200, чтобы изменить ширину холста .lib на 200 пикселей.

person Jerry    schedule 22.01.2015

Диспетчер геометрии сетки использует систему весов для перераспределения дополнительного пространства для столбцов (и строк), однако все столбцы (и строки) начинаются с нулевого веса, поэтому по умолчанию дополнительное пространство вообще не выделяется. Вы должны явно указать этому столбцу ненулевой вес.

grid columnconfigure . 1 -weight 1

Обратите внимание, что вес применяется ко всему столбцу, а не к отдельным виджетам в нем, поэтому вес нельзя установить при добавлении виджета.

person Donal Fellows    schedule 21.01.2015
comment
Я добавил эту команду в свой сценарий и получил: Ошибка в сценарии запуска: ожидаемое целое число, но получено -вес (при извлечении параметров разрешены только целочисленные индексы) при выполнении grid columnconfigure. -weight 1 Поэтому я обновил его до: grid columnconfigure. 0 -weight 1 Скрипт запустился без ошибок, но создает такое же окно, как на прикрепленной картинке. Только когда я изменяю его размер, столбец 0 сжимается, когда 2 других остаются прежними. В моем примере я хочу получить два узких и один большой холст на старте. - person Roman Kaganovich; 21.01.2015
comment
@RomanKaganovich О да, забыл сказать, какой колонке придать вес. :-) Столбцы и строки нумеруются с 0. Начальные размеры также определяются «естественными» размерами виджетов. Попробуйте также установить параметр -width на холстах. - person Donal Fellows; 21.01.2015