2012-01-19 8 views
7

私はこのPythonコードを実行した場合:なぜ "geometry()"メソッドが遅れて動作するのですか?

from Tkinter import *; w = Tk(); w.geometry("640x480"); print(w.geometry()) 

を私は "1×1 + 0 + 0" 出力が得られます。しかし、私は通訳を開始し、二つの別々の コマンドとしてこれを実行した場合、私は完全に異なる出力が得られます:

>>> from Tkinter import *; w = Tk(); w.geometry("640x480") 
'' 
>>> w.geometry() 
'640x480+101+73' 

をジオメトリは、即座に適用されていない他の何かが必要なようだ:。 (たぶん、誰もが私は必要なものを知っています?ジオメトリ インプレースを更新するために行うために、私はそれが正しく中央/位置メインにし、子ウィンドウ必要

+0

私は、ウィンドウの作成とそのサイズの読み込みの間にある程度の遅延時間があると仮定します。不思議なことに、私が印刷物「foo」を置くと、最後の2つのステートメントの間で動作しますが、私がそれらの2つを置くと、Pythonがハングアップするようです。 – jgritty

答えて

6

は、ウィンドウ(またはウィジェット)にupdate_idletasks()を呼び出す更新するために、その形状を強制します。アプリケーションがアイドル状態のタスクを更新するまで、ジオメトリが正確ではありません

はここでTkinterの参照から少しテキストスニペットです。特に、すべてのジオメトリは、ウィジェットとジオメトリ・マネージャがそのポジションをネゴシエートするまで、最初は「1x1 + 0 + 0」です。

0

これは完了しますが、間違った答えを与える:。

from Tkinter import *; w = Tk(); w.geometry("640x480"); print "foo"; print(w.geometry()) 

'' 
foo 
1x1+0+0 

これはハングするようです:

from Tkinter import *; w = Tk(); w.geometry("640x480"); print "foo"; print "foo"; print(w.geometry()) 

キーボードの割り込みだけが私を奪うようです。

案の定、これが正しく動作するように見えるん:

from Tkinter import *; w = Tk(); w.geometry("640x480"); w.update_idletasks(); print(w.geometry()) 

'' 
640x480+5+27 
+0

私はそれは思っています** doesnt **仕事... – joaquin

+0

良い点。私はちょうどそれが完了するという意味で仕事を意味しました。 – jgritty

関連する問題