Как установить максимальный размер ScrolledWindow от BWidget?

Я использую BWidget"s ScrolledWindow в таком коде:

toplevel .top
set w [ScrolledWindow .top.scrolledWindow]
set f [ScrollableFrame $w.scrollableFrame -constrainedwidth true]
$w setwidget $f
set a [$f getframe]
# here goes some stuff in $a

Таким образом, я получаю окно с вертикальной полосой прокрутки. При увеличении высоты .topчерез некоторое время все содержимое $a становится видимым, и полоса прокрутки исчезает, поскольку она больше не нужна. Как я могу запретить дальнейшее увеличение высоты .top? т.е. мне нужно установить максимальную высоту .top к значению, когда все содержимое $a является видимым. Как я могу это сделать?

1 ответ

Решение

Чтобы установить максимальную высоту верхнего уровня, вы используете wm maxsize возможно с очень большим значением для горизонтального размера. Чтобы получить текущий размер, вы используете winfo height (а также winfo width в другом измерении). Объединяя эти:

# 10k is just a "big" number
wm maxsize .top 10000 [winfo height .top]

Сложность в BWidget заключается в том, что он не устанавливает размер окна сразу или даже при первом отображении. Это означает, что вы должны указать, когда настраивать окно. Дешевая вещь, которую стоит попробовать - это поставить ее на полсекунды в будущем; в конце концов, даже опытные пользователи, скорее всего, потратят хотя бы немного времени на поиск, прежде чем взаимодействовать с ним. Это сделано с after как это:

# 500 milliseconds in the future
after 500 {
    # 10k is just a "big" number
    wm maxsize .top 10000 [winfo height .top]
}
Другие вопросы по тегам