Tcl / Tk: ограничение виджета для изменения размера текста - PullRequest
1 голос
/ 25 января 2012

У меня есть вопрос об ограничении изменения размера виджета text Tk. У меня есть следующий код с двумя text виджетами, выстроенными в линию друг над другом. Проблема в том, что когда я изменяю размер текстового виджета, содержащего «Box2», он просто исчезает, как показано на изображениях ниже.

Я хочу сделать изменение размера так, чтобы "Box2" также был виден. Если на определенной стадии изменения размера, если «Box2» не может быть отображено, то изменение размера до меньшего размера должно быть запрещено (хотя изменение размера до большего размера должно быть разрешено).

Нормальный размер This the normal sized one

Изменение размера Here

Код для воспроизведения проблемы:

#----------------------------------------------
# scrolled_text from Brent Welch's book
#----------------------------------------------
proc scrolled_text { f args } {
    frame $f
    eval {text $f.text -wrap none \
        -xscrollcommand [list $f.xscroll set] \
        -yscrollcommand [list $f.yscroll set]} $args
    scrollbar $f.xscroll -orient horizontal \
        -command [list $f.text xview]
    scrollbar $f.yscroll -orient vertical \
        -command [list $f.text yview]
    grid $f.text $f.yscroll -sticky news
    grid $f.xscroll -sticky news
    grid rowconfigure $f 0 -weight 1
    grid columnconfigure $f 0 -weight 1
    return $f.text
}


proc horiz_scrolled_text { f args } {
    frame $f
    eval {text $f.text -wrap none \
        -xscrollcommand [list $f.xscroll set] } $args
    scrollbar $f.xscroll -orient horizontal -command [list $f.text xview]
    grid $f.text -sticky news
    grid $f.xscroll -sticky news
    grid rowconfigure $f 0 -weight 1
    grid columnconfigure $f 0 -weight 1 
    return $f.text
}
set st1 [scrolled_text .t1 -width 40 -height 10]
set st2 [horiz_scrolled_text .t2 -width 40 -height 2]

pack .t1 -side top -fill both -expand true
pack .t2 -side top -fill x 

$st1 insert end "Box1"
$st2 insert end "Box2"

1 Ответ

1 голос
/ 26 января 2012

Использование grid вместо pack, как предлагает schlenk works.

set st1 [scrolled_text .t1 -width 80 -height 40]
set st2 [horiz_scrolled_text .t2 -width 80 -height 2]

grid .t1 -sticky news
grid .t2 -sticky news

# row 0 - t1; row 1 - t2
grid rowconfigure . 0 -weight 10  -minsize 5
grid rowconfigure . 1 -weight 2   -minsize 1
grid columnconfigure . 0 -weight 1

$st1 insert end "Box1"
$st2 insert end "Box2"

Ключ здесь rowconfigure и присвоенный ему вес. Я назначил 10 на .t1 и 2 на .t2 в соответствии с их height значениями. Я также установил minsize на 5 и 1, чтобы мы не сжимали окно выше определенного минимума.

columnconfigure имеет weight, установленный на 1, потому что если мы пытаемся изменить размер по горизонтали, окна должны расширяться и заполняться вместо того, чтобы оставлять пустые места.

...