1

我想要一个从左到右填满整个屏幕的框架(因为边框浮雕),并且其中的小部件粘在左侧。但是当我放在-sticky nswe框架和小部件本身上时,框架占据了整个窗口,但小部件与框架中心-sticky nsw的左侧对齐,而不是在它的最左侧:

在此处输入图像描述

我希望它看起来像(用油漆创建):

在此处输入图像描述

创建它的代码是(对于上框架,带有文件扩展名):

编辑:添加了更多代码,并修复了列和行的编号问题

proc eyes_view_create_file_extention_bar {frm_main listOfPossibleExtensions} {
    #Files Extention Bar
    set files_cb ::eyes_view_file_ext_arr_cb
    grid [set file_frm [frame $frm_main.file_frm -relief groove -bd 2]] -row 0 -column 0 -columnspan 2 -sticky nswe
    set file_lbl [label $file_frm.lbl -text "File Extenctions to Show:"]
    set columns 0
    foreach file_ext $listOfPossibleExtensions {
        set cb [checkbutton $file_frm.[regsub -all {\.} $file_ext {}] -text $file_ext -variable ${files_cb}(${file_ext}) -command [list _eyes_view_update]]
        set ${files_cb}(${file_ext}) 0
        grid $cb -row 1 -column $columns -sticky wsn
        incr columns
    }
    grid $file_lbl -row 0 -columnspan $columns -sticky wsn    
}

proc eyes_view_main_widget {base listOfExternalVarsAndValues listOfPossibleExtensions} {

    wm title $base "Eyes Viewer"
    array set [set files_cb ::eyes_view_file_ext_arr_cb] {}
    array set [set vars_cb ::eyes_view_vars_arr_cb] {}
    set frm_main [frame  $base.main_frm]
    pack $frm_main -expand 1 -fill both

    #graph
    set g_frm [frame $frm_main.graph]
    grid $g_frm -row 2 -column 1 -sticky nsew
    set g [eyes_graph_widget $frm_main.graph graph]
    #splits table

    grid [set split_frm [frame  $frm_main.tbl_split]] -row 2 -column 0 -sticky nswe
    set apply_button    [button $split_frm.apply -text "Apply" -command [list _eyes_view_update]]
    set split_tbl_frm   [frame  $split_frm.tbl_frm]

    set split_table [sparam_table_widget $split_tbl_frm split_table]

    #file extensions frame, vars frame & legend
    set file_frm [eyes_view_create_file_extention_bar $frm_main $listOfPossibleExtensions]
    set var_frm  [eyes_view_create_vars_values_bar $frm_main $listOfExternalVarsAndValues]
    set legend_frm [eyes_view_create_legend_frame $frm_main]

    grid $split_tbl_frm -row 0 -sticky nwse
    grid $apply_button  -row 1 -sticky nwse

    grid columnconfigure $frm_main 0 -weight 0
    grid columnconfigure $frm_main 1 -weight 1
    grid rowconfigure    $frm_main 0 -weight 0
    grid rowconfigure    $frm_main 1 -weight 0
    grid rowconfigure    $frm_main 2 -weight 1
    grid rowconfigure    $frm_main 3 -weight 0

    grid rowconfigure    $split_frm 0 -weight 1
    grid rowconfigure    $split_frm 1 -weight 0
    ...
    return [list $g $split_table $legend_frm $frm_main]
}
4

2 回答 2

2

您需要告诉父窗口 ($frm_main) 您希望它如何将几何更改传播到其子窗口。在这种情况下,您可能想要:

grid columnconfigure $frm_main 1 -weight 1
grid rowconfigure $frm_main 1 -weight 1

这表示当父大小发生变化时为第 1 行第 1 列提供新空间。值得仔细阅读这方面的文档,并使用一些具有不同颜色的简单框架(框架 .f -背景红色等)来很好地了解网格的工作原理。

您的数组处理在示例中也被破坏了。-variable 选项采用变量名称,因此您只需要-variable files_cb($file_ext)并且在尝试设置数组值时也不想取消引用。试试set files_cb($file_ext) 0吧。

于 2012-12-10T16:25:43.803 回答
1

我无法重现您的问题。在我修复了所有变量之后,我得到了你想要的行为。可能是因为这不是一个完整的脚本,而且遗漏的部分还有些内容。无论如何尝试以下操作:

改变

grid $file_frm -row 1 -column 1 -columnspan 2 -sticky nswe

grid $file_frm -row 1 -column 1 -columnspan 2 -sticky nswe
grid anchor $file_frm w
于 2012-12-10T16:26:44.637 回答