2012-01-19 18 views
7

Jeśli ten kod Pythona:Dlaczego metoda "geometria()" działa z opóźnieniem?

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

i dostanie "1x1 + 0 + 0" na wyjściu. Ale jeśli zacznę tłumacza i wykonać to jako dwa osobne poleceń, ja się zupełnie inny wynik:

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

Wydaje geometria nie jest stosowana tam, coś jeszcze jest potrzebne. (Może ktoś wie co trzeba ? zrobić w celu aktualizacji geometria inplace potrzebna do prawidłowego Center/pozycja główne i podrzędne okna

+0

Dobre pytanie. Zakładam, że istnieje pewien czas opóźnienia między utworzeniem okna i odczytaniem jego rozmiaru. O dziwo, jeśli wydrukuję "foo"; pomiędzy 2 ostatnie instrukcje działa, ale jeśli umieścić dwa z nich python wydaje się zawiesić. – jgritty

Odpowiedz

6

Wywołanie update_idletasks() na oknie (lub widżet) zmusi swoją geometrię, aby zaktualizować.

Oto mały fragment tekstu z odniesienia Tkinter:

Geometria nie jest dokładna, aż aplikacja zaktualizowała swoje zadania bezczynności. W szczególności wszystkie geometrie są początkowo "1x1 + 0 + 0", dopóki widgety i menedżer geometrii nie wynegocjują swoich pozycji.

0

tym kończy, ale daje złą odpowiedź.

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

'' 
foo 
1x1+0+0 

Wydaje się, że to się zawiesiło:

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

Wydaje mi się, że tylko przerwano działanie klawiatury.

Rzeczywiście, to wydaje się działać prawidłowo:

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

'' 
640x480+5+27 
+0

Myślę, że ** nie działa ** ... – joaquin

+0

Dobra uwaga. Po prostu miałem na myśli pracę w tym sensie, że kiedykolwiek się kończy. – jgritty

Powiązane problemy