2012-01-19 8 views
7

Si corro el código Python:¿Por qué el método "geometry()" funciona con un retraso?

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

voy a conseguir "1x1 + 0 + 0" de salida. Pero si comienzo intérprete y ejecutar esto como dos comandos separados, voy a obtener una salida completamente diferente:

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

Parece geometría no se aplica al instante, se necesita algo más:. (Tal vez alguien sabe lo que necesito ? que ver con el fin de actualizar la geometría inplace lo necesito para correcta posición central/principal y ventanas secundarias

+0

Buena pregunta. Supongo que hay un tiempo de retraso entre la creación de la ventana y la lectura de su tamaño. Extrañamente, si pongo una impresión "foo"; entre las dos últimas declaraciones funciona, pero si pongo dos de ellas, Python parece colgarse. – jgritty

Respuesta

6

Calling update_idletasks() en una ventana (o un widget) obligará a su geometría para actualizar.

aquí hay un pequeño fragmento de texto a partir de la referencia Tkinter:

La geometría no es exacta hasta que la aplicación se ha actualizado sus tareas ociosas. En particular, todas las geometrías son inicialmente "1x1 + 0 + 0" hasta que los widgets y el administrador de geometría hayan negociado sus posiciones.

0

Esto completa, pero da una respuesta incorrecta:.

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

'' 
foo 
1x1+0+0 

Parece que esto se bloquea:

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

Parece que solo una interrupción de teclado me saca.

Efectivamente, esto no parece funcionar correctamente:

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

'' 
640x480+5+27 
+0

Creo que ** no ** funciona ... – joaquin

+0

Buen punto. Solo me refería al trabajo en el sentido de que alguna vez se completa. – jgritty

Cuestiones relacionadas