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

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

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

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

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

#!/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)


arrow_upward
1
arrow_downward

Если вы не «исправляете» ширину столбцов для холстов, вы можете установить определенную ширину с помощью параметра -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

arrow_upward
0
arrow_downward

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

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