无法在 tcl/tk 中移动按钮

Not able to move button in tcl/tk

GUI snapshot 在这段代码中,我想将 new_button 移动到最右边 side.But 在更改行、列、列跨度之后,它只保留在那里。代码需要进行哪些更改。

ttk::frame .c
.c configure -borderwidth 7 -relief groove -padding "200 25"
button .c.cancle -text cancel -command {destroy .}
ttk::label .c.l -text "yash"
ttk::checkbutton .c.one -text One -variable oe -onvalue 1
ttk::button .c.ok -text Okay -command sp12
button .c.lop -text New_button

grid .c -column 0 -row 4
grid .c.l -column 0 -row 1 -columnspan 2
grid .c.one -column 0 -row 3 -columnspan 2
grid .c.ok -column 3 -row 3 -columnspan 2
grid .c.cancle -column 9 -row 3 -columnspan 2
grid .c.lop -column 30 -row 10 -rowspan 10 -columnspan 15 -sticky w

grid 可能很棘手。如果其中一行或一列中没有小部件,则该行 and/or 列将被视为具有 0 宽度 and/or 0 高度。因此增加行号and/or列号不会改变任何东西。

在您当前的脚本中,框架的填充防止 .c 网格内的小部件靠近 .c 边界(填充添加 'layer' of space 在边框和其中的小部件之间)。所以这是首先要删除的东西。一旦完成,小部件将失去它的大小,因为小部件的大小毕竟取决于它里面的小部件的大小。

因此这里的解决方法是定义最小尺寸:

ttk::frame .c
.c configure -borderwidth 7 -relief groove
wm minsize . 656 135  # Set a minimum size here
button .c.cancle -text cancel -command {destroy .}
ttk::label .c.l -text "yash"
ttk::checkbutton .c.one -text One -variable oe -onvalue 1
ttk::button .c.ok -text Okay -command sp12
button .c.lop -text New_button

# I cleaned up the columns
grid .c -row 0 -column 0 -sticky nsew # make it anchor all positions
grid .c.l -column 1 -row 1
grid .c.one -column 1 -row 2
grid .c.ok -column 2 -row 2
grid .c.cancle -column 3 -row 2
grid .c.lop -column 4 -row 3 -sticky se # make it anchor at south east position

# make the .c grid fit to the . window
grid columnconfigure . all -minsize 635 -weight 1
grid rowconfigure . all -weight 1
# force column before column 1 and row before row 1 to have some specific size
grid columnconfigure .c 0 -minsize 200
grid rowconfigure .c 0 -minsize 30
# make the last cell fill any spaces after it, if available
grid columnconfigure .c 4 -weight 1
grid rowconfigure .c 4 -weight 1

结果: