2012-05-08 75 views
3

我这样做的原因是因为我试图将窗口设置在屏幕的中心。我正在使用网格不包,我已阅读使用wm grid但不知道如何设置它。我也不明白为什么. cget -width返回0我认为网格应该在没有给出选项时设置大小?使用网格时遇到tcl/tk程序的问题

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家庭作业我不只是想要一个代码帖子。谢谢

回答

5

[. cget -width][. cget -height]返回明确配置窗口的宽度/高度。对于Tk中的大多数小部件,您不明确配置尺寸。相反,小部件具有基于小部件内容的“自然”宽度/高度。例如,一个标签足够宽/足以容纳其中的文字。顶层窗口只是足够大,以适应其中的所有小部件。

要获得窗口的实际尺寸,您应该使用[winfo width .][winfo height .]。确保你在之后做了这个窗口,并且其中的所有小部件都被映射了(通常这意味着在调用[winfo ...]之前执行[update]调用)。否则,几何管理器可能还没有更新窗口小部件/窗口的尺寸。

+1

+1很好解释 –

0

关于Eric的回答:[更新]是 usually almost always a mistake。有关如何避免它的示例,请参阅Tcl wiki。一个技巧是绑定到<配置>事件并调用绑定脚本中的[winfo ...]。