Tcl/Tk: 如何自动扩展框架以填充网格中的一行
Tcl/Tk: How to auto expand frame to fill a row in grid
我正在尝试创建一个有两个框架的 tk window。第一个在上面,另一个在下面。顶部的框架应包含一个需要填充整个框架的文本框。
但是使用下面的代码,我发现框架只填充了 window 的一半,文本框也只填充了框架的一半。我正在使用网格方法,因此它会自动展开,但它既不会自动展开,也不会让小部件填充它们各自的容器。我想知道网格方法是否适合这个目的?
namespace eval RESTLogVwr {}
toplevel .t
wm geometry .t 1500x800+10+10
wm resizable .t 0 0
grid rowconfigure .t 2 -weight 1
frame .t.f1 -bd 2 -relief groove -bg blue
text .t.f1.text -state disabled -bg black
pack .t.f1.text -fill both -expand 0
grid config .t.f1 -row 2 -column 3 -columnspan 1 -rowspan 1 -sticky "snew"
grid config .t.f1.text -row 2 -column 3 -columnspan 1 -rowspan 1 -sticky "snew"
grid rowconfigure .t 2 -weight 1
问题是您要求扩展包含框架 .t.f1
的行,但没有要求扩展包含文本 .t.f1.text
的行。 (-sticky
选项描述了小部件如何扩展到给定的 space,但不是首先给包含小部件的单元格提供多少 space。)
我猜问题出在你说:
grid rowconfigure .t 2 -weight 1
两次,这是多余的,表明您的配置有误;将 second 一个(在示例脚本的末尾)更改为此以修复问题:
grid rowconfigure .t.f1 2 -weight 1
一般要点:我发现在设计事物时保持网格尽可能浅是有帮助的,并且在单元格边界应该画出(必要时在纸上)是。每个级别都需要自己的设计,只有 非常 复杂的设计(我不想使用复杂性)需要额外的框架。
toplevel .t
wm geometry .t 1500x800+10+10
wm resizable .t 0 0
frame .t.f1 -bd 2 -relief groove -bg blue
text .t.f1.text -state disabled -bg black
pack .t.f1.text -fill both -expand 0
此处.t.f1.text
已由pack
管理:您不需要由grid
管理。
grid .t.f1 -row 2 -column 3 -sticky snew
grid rowconfigure .t .t.f1 -weight 1
grid columnconfigure .t .t.f1 -weight 1
通过为列和行设置权重,您可以使框架在两个维度上扩展。
文档:
frame (widget),
grid,
pack,
text (widget),
toplevel,
wm
我正在尝试创建一个有两个框架的 tk window。第一个在上面,另一个在下面。顶部的框架应包含一个需要填充整个框架的文本框。
但是使用下面的代码,我发现框架只填充了 window 的一半,文本框也只填充了框架的一半。我正在使用网格方法,因此它会自动展开,但它既不会自动展开,也不会让小部件填充它们各自的容器。我想知道网格方法是否适合这个目的?
namespace eval RESTLogVwr {}
toplevel .t
wm geometry .t 1500x800+10+10
wm resizable .t 0 0
grid rowconfigure .t 2 -weight 1
frame .t.f1 -bd 2 -relief groove -bg blue
text .t.f1.text -state disabled -bg black
pack .t.f1.text -fill both -expand 0
grid config .t.f1 -row 2 -column 3 -columnspan 1 -rowspan 1 -sticky "snew"
grid config .t.f1.text -row 2 -column 3 -columnspan 1 -rowspan 1 -sticky "snew"
grid rowconfigure .t 2 -weight 1
问题是您要求扩展包含框架 .t.f1
的行,但没有要求扩展包含文本 .t.f1.text
的行。 (-sticky
选项描述了小部件如何扩展到给定的 space,但不是首先给包含小部件的单元格提供多少 space。)
我猜问题出在你说:
grid rowconfigure .t 2 -weight 1
两次,这是多余的,表明您的配置有误;将 second 一个(在示例脚本的末尾)更改为此以修复问题:
grid rowconfigure .t.f1 2 -weight 1
一般要点:我发现在设计事物时保持网格尽可能浅是有帮助的,并且在单元格边界应该画出(必要时在纸上)是。每个级别都需要自己的设计,只有 非常 复杂的设计(我不想使用复杂性)需要额外的框架。
toplevel .t
wm geometry .t 1500x800+10+10
wm resizable .t 0 0
frame .t.f1 -bd 2 -relief groove -bg blue
text .t.f1.text -state disabled -bg black
pack .t.f1.text -fill both -expand 0
此处.t.f1.text
已由pack
管理:您不需要由grid
管理。
grid .t.f1 -row 2 -column 3 -sticky snew
grid rowconfigure .t .t.f1 -weight 1
grid columnconfigure .t .t.f1 -weight 1
通过为列和行设置权重,您可以使框架在两个维度上扩展。
文档: frame (widget), grid, pack, text (widget), toplevel, wm