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

エリックの答えについてのメモ:[更新]は通常、ほとんどの場合間違いです。それを回避する方法の例については、Tclwikiを参照してください。1つのトリックは、<configure>イベントにバインドし、バインドされたスクリプトで[winfo...]を呼び出すことです。

于 2013-08-28T05:02:59.133 に答える