Tcl / Tk:如何自动展开框架以填充网格中的一行

时间:2016-07-04 08:36:00

标签: tcl tk

我正在尝试创建一个有两个框架的tk窗口。首先在上面,另一个在下面。顶部的框架应包含一个需要填写整个框架的文本框。

但是使用下面的代码,我发现框架只有一半填充窗口,文本框只有一半填充框架。我正在使用网格方法,以便它自动扩展,但它既没有自动扩展也没有小部件填写他们各自的容器。如果网格approch正确用于此目的,我是不是很好?

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

2 个答案:

答案 0 :(得分:2)

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)gridpacktext (widget)toplevelwm

答案 1 :(得分:1)

问题是您已经要求包含框架.t.f1的行展开,但没有要求包含文本.t.f1.text的行展开。 (-sticky选项描述了小部件如何扩展到它们被给定的空间,但不是首先给出包含小部件的单元格的空间大小。)

我猜你问的问题是:

grid rowconfigure .t 2 -weight 1

两次,这是多余的,表明你的配置有误;将 second 一个(在示例脚本的末尾)更改为此内容以修复问题:

grid rowconfigure .t.f1 2 -weight 1

一般要点:我发现在设计事物时尽量保持网格尽可能浅,并在必要时在纸上画出细胞边界。每个级别都需要自己的设计,只有非常复杂的设计(我根本不想使用复杂性)需要额外的帧。

相关问题