如何在Tcl / Tk中调整框架的大小

时间:2014-06-25 22:18:41

标签: tcl tk

如何禁用Tcl / Tk中的帧

我试过了:

ttk::frame .container;
wm resizable .container 0 0

但它不起作用。它说它不是顶级容器。当我尝试使用相同的东西时:

toplevel .container
wm resizable .container 0 0

这很有用。但这不是我想要的。我想禁用一个不是顶级容器的框架。

2 个答案:

答案 0 :(得分:1)

试试这个:

首先创建一个顶层窗口......

% set tl [toplevel .someNameOrOther]

......和一个框架在那个顶层...

% set frm [ttk::frame $tl.myFrame]

...然后将框架打包到顶层容器中......

% pack $frm -expand yes -fill both

...将顶层容器设置为不可调整大小

% wm resizable $tl 0 0

......你已经完成了。保存框架的顶层容器上的最大化按钮显示为灰色。

无论您使用的是旧式frame,还是较新的ttk::frame,以及您用于顶层的几何管理器 - gridpack,这都应该有效如上所述。

编辑纠正Hoodiecrow指出的错别字

答案 1 :(得分:1)

tl; dr 你不能这样做。试试place,了解packgrid中禁用传播的内容。


每个小部件的大小(和位置)完全完全受其容器的支配。对于顶层窗口小部件,容器(有效地)是窗口管理器,wm命令向窗口管理器发出礼貌请求(这也意味着它只适用于顶层窗口小部件,并且可能应该通过toplevel上的选项来完成,但那是几十年前错过的一条船。)

对于非顶层,Tk处于控制状态,它通过其几何管理器系统完成此操作(与某些工具包不同,Tk不会严格地将每个窗口小部件绑定到使用单个几何管理器)。 packgrid几何管理器非常热衷于调整窗口小部件的大小,以便根据已经给出的指令尝试生成通常令人满意的布局;每个都允许关闭传播(如果您将内容放在框架中,您可能会发现这相关),这意味着它们会停止调整母版的大小以响应所请求的对子项大小的更改,但它们仍然会更改子项的大小尺寸。

但是,place几何管理器可以完成您所追求的事情。使用place,您可以准确控制发生的事情,直接指定位置和大小。实际上,如果你想做传播这样的事情,你必须自己安装<Configure>事件来检测需要发生变化的事实,而你几乎必须自己完成所有的逻辑。对于大小没有改变的小部件,只需在设置小部件的place时不指定宽度和高度,所有都应该没问题。

ttk::frame .f -width 15 -height 18
place .f -x 30 -y 45

请注意,这意味着您承担了使事情看起来不错的责任。大多数使用Tk编程的人都会更容易使用gridpack,而只需在窗口小部件上指定填充。

相关问题