我这样做的原因是因为我试图将窗口设置在屏幕的中央。我正在使用网格而不是打包,我已阅读有关使用wm grid
但未了解如何设置它的信息。我也不明白为什么. cget -width
正在返回0
我认为网格应该在未给出选项时设置大小?
set width [. cget -width]
set height [. cget -height]
puts $height
puts $width
set x [expr { ( [winfo vrootwidth .] - $width ) / 2 }]
set y [expr { ( [winfo vrootheight .] - $height ) / 2 }]
wm title . "a3q2"
wm geometry . ${width}x${height}+${x}+${y}
这次我做错了什么? P.S家庭作业我不只是想要一个代码。感谢
答案 0 :(得分:5)
[. cget -width]
和[. cget -height]
返回窗口的显式配置的宽度/高度。对于Tk中的大多数小部件,您没有明确配置尺寸。相反,小部件具有基于小部件内容的“自然”宽度/高度。例如,标签的宽度/高度足以容纳其中的文本。顶层窗口足够大,可以容纳其中的所有小部件。
要获取窗口的实际尺寸,您应该使用[winfo width .]
和[winfo height .]
。确保在窗口之后执行,并且已经映射了其中的所有小部件(通常这意味着在[update]
调用之前进行[winfo ...]
调用)。否则,几何管理器可能尚未更新窗口小部件/窗口的尺寸。
答案 1 :(得分:0)
有关Eric的答案的说明:[update]为usually almost always a mistake。有关如何避免它的示例,请参阅Tcl wiki。一个技巧是绑定到< configure> event并在绑定脚本中调用[winfo ...]。