LINUX.ORG.RU

resize приложения на Tk

 , , ,


0

1

Есть такой код

proc create_gui {} {
    # выбор устройства, кнопка подключения
    pack [ttk::combobox .devices -textvariable device -values [list] -state readonly] -pady 5 -padx 5  -side top -fill x
    pack [frame .buttons] -fill x -side top
    pack [ttk::button .buttons.btn_refresh -text "Refresh" -command refresh] -padx 5 -pady 5 -side left -fill x -expand 1
    pack [ttk::button .buttons.btn_connect -text "Connect" -command connect] -padx 5 -pady 5 -side left -fill x -expand 1
    pack [ttk::button .buttons.btn_exit -text "Exit" -command {cleanup; exit;}] -padx 5 -pady 5 -side left -fill x -expand 1
    # напряжение
    pack [frame .voltage_label]  -padx 5 -pady 5 -fill both -expand 0
    pack [label .voltage_label.lbl1 -text "Voltage: "] -padx 5 -pady 5 -side left -fill x -expand 0
    pack [label .voltage_label.value -textvariable ::voltage] -pady 5 -side left -fill x -expand 0
    pack [label .voltage_label.lbl2 -text "V"] -pady 5 -side left -fill x -expand 0
    # логи
    pack [frame .log_frame]  -padx 5 -pady 5 -fill x -expand 0
    pack [ttk::scrollbar .log_frame.sby -orient vert -command {.log_frame.log yview}] -padx 5 -pady 5 -side right -fill both -expand 0
    pack [text .log_frame.log -relief sunken -yscrollcommand {.log_frame.sby set}] -padx 5 -pady 5 -fill both -expand 1

    pack [canvas .c -width 500 -height 500] -fill both -expand 1
    set ::outer_oval [.c create oval 450 450 50 50]
    set ::inner_oval [.c create oval 300 300 200 200 -fill blue]
}

create_gui

При ресайзе (уменьшении высоты) такого окна канвас .c с кругами пропадает за нижней границей окна, в то время как остальные виджеты начинают уменьшаться, чтобы влезть в окно. Как лечить?

★★★★

А что хочется, чтобы в результате получилось? Если хочется, чтобы .log_frame изменялся, то поставь его последним, а холст с кругами пакуй, прижимая к нижнему краю -side bottom:

    pack [canvas .c -width 500 -height 500] -side bottom -fill both -expand 1
    set ::outer_oval [.c create oval 450 450 50 50]
    set ::inner_oval [.c create oval 300 300 200 200 -fill blue]
    # логи
    pack [frame .log_frame] -padx 5 -pady 5 -fill x -expand 0
    pack [ttk::scrollbar .log_frame.sby -orient vert -command {.log_frame.log yview}] \
        -padx 5 -pady 5 -side right -fill both -expand 0
    pack [text .log_frame.log -relief sunken -yscrollcommand {.log_frame.sby set}] \
        -padx 5 -pady 5 -fill both -expand 1

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

Да, это то что нужно, спасибо! А почему канвас не ресайзится как остальные виджеты?

WRG ★★★★
() автор топика
Ответ на: комментарий от TeopeTuK

Все, разобрался, спасибо еще раз!

WRG ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.