使用网格时遇到tcl / tk程序故障

时间:2012-05-08 00:39:18

标签: tcl tk

我这样做的原因是因为我试图将窗口设置在屏幕的中央。我正在使用网格而不是打包,我已阅读有关使用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家庭作业我不只是想要一个代码。感谢

2 个答案:

答案 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 ...]。