如何通过在tcl tk GUI中调整窗口大小来调整窗口内的框架,标签,文本等小部件的大小

时间:2017-09-08 21:48:14

标签: css tcl tk

我是tcl \ tk的新手,我正在使用它开发UI。 UI窗口具有一个框架,该框架具有动态数量的标签和文本小部件,这些小部件根据表中的列数填充。每列都有一个条目小部件,用户在其中输入的数据会填充表中的每一列。

然而,我面临的问题是,我找不到一种方法来使窗口框架内的窗口小部件的大小和位置根据窗口的大小自行调整。也就是说,如果用户通过拖动和放大其大小来放大窗口,则窗口内的小部件也应该增大并根据窗口大小调整它们的位置。反之亦然,如果窗口大小id减小。像HTML,CSS中的bootstrap之类的东西。 任何人都可以给我任何想法? 任何帮助是极大的赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

您需要阅读gridpack命令的文档。

使用pack-fill-expand选项可帮助您调整。{1}}和pack .widget -fill both -expand true pack .widget -fill x -expand true -anchor s 选项 小部件对调整大小做出反应。

示例:

grid

使用-stickycolumnconfigure选项以及rowconfiguregrid .widget -sticky ew grid columnconfigure . 0 -weight 1 子命令对您有用。

示例:

<Configure>

在某些情况下,您可能需要采取特殊措施来调整大小。在这种情况下,bind命令将很有用。您可以绑定到grid columnconfigure事件并调整窗口小部件大小或根据需要采取其他操作。

修改

.widget适用于包含框架的列。因此,您不必为每个小部件运行它。在上面的示例中,.框架中包含.,并且# in this example, the entry fields will adjust their width when # the window is resized. package require Tk grid columnconfigure . 1 -weight 1 foreach {val} {1 2 3 4 5 6 7} { ttk::label .lab$val -text "Label $val:" ttk::entry .entry$val -textvariable mydata($val) grid .lab$val .entry$val -in . -sticky w # change the configuration for .entry$val only... grid configure .entry$val -sticky ew } proc doresize { win } { puts "Win $win now has width: [winfo width $win]" } bind . <Configure> [list ::doresize %W] 框架的列已配置。

bind

请注意,在此示例中,.也适用于.的所有子项,因为.是顶级窗口。如果您只对proc doresize { win } { if { $win eq "." } { puts "Win $win now has width: [winfo width $win]" } } 的更改感兴趣,可以更改调整大小过程:

bind

如果set vars(last.width) 0 proc doresize { win } { variable vars if { $win eq "." } { set newwidth [winfo width $win] if { $newwidth != $vars(last.width) } { puts "Win $win now has width: [winfo width $win]" if { $vars(last.width) != 0 } { # this is not the first time, as last.width is not zero # do something due to window resize. } set vars(last.width) $newwidth } } } 应用于不是顶级窗口的框架或窗口小部件,则仅接收该框架或窗口小部件的事件。

另请注意,您将收到所有事件。可以进一步更改以检查宽度的变化:

ORDERS(idOrder, idProduct, Qty, OrderDate)

参考文献:gridpackbind