早上好
我有一个tcl / tk应用程序,对于Windows大小,我有以下代码:
wm title . "Relay Switch Application"
wm attributes . -alpha "1"
wm geometry . 1600x500+100+100
在窗口中,有3个标签框位于:
x1:10 x2:200 x3:320
在我的PC上,每个标签框并排放置,它们之间有大约20个像素的间隙。 在我的笔记本电脑上,第二个标签框架重叠在第一个标签框架上。
如何更改或添加代码,以便无论屏幕分辨率如何正确放置Windows内容?
先谢谢您。
答案 0 :(得分:1)
GUI的事实是,绝对定位窗口(在带有place
的主窗口中或位于带有wm geometry
的顶级窗口中)通常是个坏主意。这是因为屏幕像素密度变化或字体宽度变化等小问题,但这只是您必须忍受的。相反,您应该编写应用程序以使用Tk的其他几何图形管理器,因为这些图形管理器会适应内容的大小以及OS和用户共同为您提供的总体屏幕空间的大小。
例如,下面是如何与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