在tcl中使用WM窗口保持恒定的窗口大小

在tcl中使用WM窗口保持恒定的窗口大小,tcl,tk,Tcl,Tk,早上好 我有一个tcl/tk应用程序,对于windows大小,我有以下代码: wm title . "Relay Switch Application" wm attributes . -alpha "1" wm geometry . 1600x500+100+100 在窗口内,有3个LabelFrame位于: x1:10 x2:200 x3:320 在我的电脑上,每个labelframe并排排列,它们之间有大约20个像素的间距。 在我的工作笔记本电脑上,第二个labelframe重叠在第一

早上好

我有一个tcl/tk应用程序,对于windows大小,我有以下代码:

wm title . "Relay Switch Application"
wm attributes . -alpha "1" 
wm geometry . 1600x500+100+100
在窗口内,有3个LabelFrame位于:

x1:10 x2:200 x3:320

在我的电脑上,每个labelframe并排排列,它们之间有大约20个像素的间距。 在我的工作笔记本电脑上,第二个labelframe重叠在第一个labelframe上

如何更改或添加代码,以使windows内容在任何屏幕分辨率下都能正确定位

先谢谢你


GUI的一个事实是,窗口的绝对定位(无论是在带有
位置的主窗口中,还是在带有
wm geometry
的顶级窗口中)通常都不是一个好主意。这是因为屏幕像素密度变化或字体宽度变化等小事情,但这只是你必须忍受的事情。相反,您应该编写应用程序来使用Tk的其他几何体管理器,因为这些管理器适应内容的大小以及操作系统和用户合谋提供给您的总体屏幕空间量

例如,下面介绍了如何将三个LabelFrame与
pack
并排放置:

# Make some labelframes
labelframe .x1 -text "This is X1"
labelframe .x2 -text "This is X2"
labelframe .x3 -text "This is X3"

# Lay them out
pack .x1 .x2 .x3 -side left -fill both -expand yes
# You might want to experiment with the -padx and -pady options
如果您需要复杂的放置规则,例如在多个方向上堆叠或使一个窗口的大小是另一个窗口的倍数,您可能会使用
grid
,这是一个几何体管理器,它足够复杂,可以处理在普通GUI中可以想到的几乎所有布局。对于这种情况来说,这相当简单:

# Put the labelframes in the grid…
grid .x1 .x2 .x3 -sticky nsew

# … and define how the system expands
grid columnconfigure {0 1 2} -weight 1
grid rowconfigure 0 -weight 1

你基本上无法得到你所要求的。如果你既不懂pack也不懂grid,我建议你先开始学习grid。它比pack更容易理解,也更强大。使用网格,您可以创建任何布局,您可以使用pack。事实并非总是相反。(但如果可以用pack完成,通常需要更少的键入。)