2012-05-08 74 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 ...]。