3

我这样做的原因是因为我试图将窗口设置在屏幕的中心。我使用的是网格而不是打包,我已经阅读了有关使用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}

这次我做错了什么?PS作业我不只是想要一个代码帖子。谢谢

4

2 回答 2

5

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

要获得窗口的实际尺寸,您应该使用[winfo width .][winfo height .]。确保窗口和其中的所有小部件都已映射之后执行此操作(通常这意味着在[update]调用之前进行[winfo ...]调用)。否则几何管理器可能尚未更新小部件/窗口的尺寸。

于 2012-05-08T06:15:31.407 回答
0

关于 Eric 回答的注释: [update]通常几乎总是一个错误。有关如何避免它的示例,请参阅 Tcl wiki。一种技巧是绑定到 <configure> 事件并在绑定脚本中调用 [winfo ...]。

于 2013-08-28T05:02:59.133 回答