/ / Warum funktioniert die Methode "geometry ()" mit einer Verzögerung? - Python, Tkinter

Warum arbeitet die Methode "geometry ()" mit einer Verzögerung? - Python, Tkinter

Wenn ich diesen Python-Code ausführe:

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

Ich bekomme "1x1 + 0 + 0" Ausgang. Aber wenn ich den Interpreter starte und das als zwei separate ausführe Befehle, ich werde eine völlig andere Ausgabe bekommen:

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

Es scheint, Geometrie wird nicht sofort angewendet,etwas anderes wird benötigt: (Vielleicht weiß jemand, was ich tun muss, um Geometrie zu aktualisieren an Ort und Stelle? Ich brauche es, um Haupt- und Kindfenster richtig zu zentrieren / zu positionieren.

Antworten:

6 für die Antwort № 1

Berufung update_idletasks() In einem Fenster (oder einem Widget) wird die Aktualisierung der Geometrie erzwungen.

Hier ist ein kleiner Textausschnitt aus der Tkinter-Referenz:

Die Geometrie ist nicht genau, bis dieAnwendung hat seine Leerlaufaufgaben aktualisiert. Insbesondere sind alle Geometrien anfänglich "1x1 + 0 + 0", bis die Widgets und der Geometrie-Manager ihre Positionen ausgehandelt haben.


0 für die Antwort № 2

Dies ist abgeschlossen, gibt aber eine falsche Antwort:

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

""
foo
1x1+0+0

Das scheint zu hängen:

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

Nur ein Tastatur-Interrupt scheint mich rauszuholen.

Sicher genug, das scheint richtig zu funktionieren:

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

""
640x480+5+27