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 № 1Berufung 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