tcl / tk panedwindows, как определить процентный размер для дочерних окон, чтобы при ручном изменении размера сохранялось соотношение экрана? - PullRequest
0 голосов
/ 12 апреля 2019

Я относительно новичок в построении интерфейса tk и пытаюсь разобраться с некоторыми вещами, прежде чем начать писать то, что мне нужно

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

я хотел бы добиться, чтобы при изменении размера корневого окна или (любых вспомогательных окон) все дочерние окна внутри него изменялись при сохранении, скажем, 50% -ного соотношения пространства

в то время как atm, когда, например, я изменяю размер корневого окна влево, желтое текстовое поле уменьшается до тех пор, пока оно полностью не исчезнет (и так далее для синего)

я хотел бы, чтобы мои две половины панели (желтая и черная, синяя и зеленая) отображались равномерно на каждой половине

То же самое для других 2-х вложенных окон с панорамированием, очевидно

похоже, что в какой-то момент окна-панорамы принимали аргумент "дробь", который бы позволил это, но это больше не кажется

заранее благодарю за вашу помощь, и если мой код слишком неуклюж и вы хотите предоставить улучшенный код вместе с ответом на мой вопрос, очень признателен

#!/bin/sh
#The next line executes wish - wherever it is \
exec wish "$0" "$@"

proc bindings {} {
    bind . <Alt-Key-x> exit
    bind . <Alt-Key-k> redraw
    bind . <Key-Escape> exit

    bind . <Key> { puts [focus] }
}       

proc redraw {} {
    # which window has focus
    set foc [focus]

    puts "kill and redraw focused windows $foc"

    destroy $foc

    if { [string equal $foc ".t1"] } {
        upleftbox
        .sp3 paneconfigure .t1 -before .t2
    } elseif { [string equal $foc ".t2"] } {
        uprightbox
        .sp3 paneconfigure .t2 -after .t1
    } elseif { [string equal $foc ".t3"] } {
        bottombox
        .sp2 paneconfigure .t3 -after .sp3
    } elseif { [string equal $foc ".t4"] } {
        sidebox
       .sp1 paneconfigure .t4 -after .sp2
    }       
}

proc scrolled_text { f args } {
    #----------------------------------------------
    # scrolled_text from Brent Welch's book
    #----------------------------------------------

    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 nsew
    grid $f.xscroll -sticky nsew
    grid rowconfigure $f 0 -weight 1
    grid columnconfigure $f 0 -weight 1
    return $f.text
}

# structure is .sp1.sp2.sp3 
# defining the layout
proc sp1 {} {
    panedwindow .sp1 -orient h -opaqueresize 0 -sashwidth 10
}

proc sp2 {} {
    panedwindow .sp2 -orient v -opaqueresize 0 -sashwidth 10
}

proc sp3 {} {
    panedwindow .sp3 -orient h -opaqueresize 0 -sashwidth 10
}

# demo textboxes to populate the 4 windows GUI
proc upleftbox {} {
    text .t1 -background black -foreground lightgreen -width 18 -height 8
}

proc uprightbox {} {
    text .t2 -background blue -foreground lightgreen -width 18 -height 8
}

proc bottombox {} {
    text .t3 -background green -foreground lightgreen -width 18 -height 8
}

proc sidebox {} {
    text .t4 -background yellow -foreground lightgreen -width 18 -height 8
}

# Main

# define basics stuff
tk_setPalette background black foreground lightgreen
wm title . paf.tk
wm minsize . 50 60

bindings

# building basic layout

# call the windows proc
sp1
sp2
sp3
sidebox
bottombox
uprightbox
upleftbox

# build the windows like russian dolls

grid .sp1 -in . -sticky nsew 

.sp1 add .sp2 .t4
.sp2 add .sp3 .t3
.sp3 add .t1 .t2

# set the weight for expanding when resizing on the fly
grid columnconfigure . .sp1     -weight 1
grid rowconfigure    . .sp1     -weight 1

1 Ответ

1 голос
/ 13 апреля 2019

Вы можете использовать ttk::panedwindow вместо panedwindow. Его подкоманда add имеет параметр -weight, который автоматически изменяет размеры дочерних окон в соответствии с их весом.

...