¿Cómo obtengo el tamaño de una ventana de pygtk?

Estoy tratando de usar gtk.window.get_size (), pero siempre devuelve el ancho y la altura predeterminados. La documentación dice

El método get_size () devuelve una tupla que contiene el ancho y la altura actuales de la ventana. Si la ventana no está en pantalla, devuelve el tamaño que PyGTK sugerirá al administrador de ventanas para el tamaño de ventana inicial. El tamaño obtenido por el método get_size () es el último tamaño recibido en un evento de configuración, es decir, PyGTK usa su tamaño almacenado localmente, en lugar de consultar el tamaño del servidor X. Como resultado, si llama al método resize () e inmediatamente llama al método get_size (), el tamaño no habrá entrado en vigencia aún. Después de que el administrador de ventanas procesa la solicitud de cambio de tamaño, PyGTK recibe una notificación de que el tamaño ha cambiado a través de un evento de configuración, y el tamaño de la ventana se actualiza.

He intentado cambiar el tamaño de la ventana manualmente y esperar un minuto más o menos, pero sigo teniendo el ancho y la altura predeterminados.

Estoy intentando usar esto para guardar el tamaño de la ventana al salir para poder restaurarlo al inicio. ¿Hay una mejor manera de hacer esto?

Aquí está el código Snipit que tengo para mi renuncia principal.

def on_main_window_destroy(self, widget, data=None): if self.view.current_view.layout == 'list': self.view.current_view.set_column_order() width = self.main_window.get_size()[0] height = self.main_window.get_size()[1] #test statement print (width, height) self.prefs.set_size_prefs(width, height) self.prefs.set_view_prefs(self.view.current_view.media, self.view.current_view.layout) gtk.main_quit() 

Creo que entiendo lo que está pasando ahora. Esto está dentro de la señal de destrucción, por lo que cuando se llama el código, la ventana ya se ha ido. ¿Hay una forma más canónica de manejar el cambio de tamaño de la ventana? Esperaba evitar manejar eventos de cambio de tamaño cada vez que el usuario cambiaba el tamaño de la ventana.

Esto parece solucionar su problema:

 import gtk def print_size(widget, data=None): print window.get_size() def delete_event(widget, data=None): print window.get_size() return False def destroy(widget, data=None): gtk.main_quit() window = gtk.Window() window.connect('delete_event', delete_event) window.connect('destroy', destroy) button = gtk.Button(label='Print size') button.connect('clicked', print_size) window.add(button) window.show_all() gtk.main() 

Creo que la clave es llamar a get_size en la señal delete_event lugar de la señal de destroy . Si lo haces en la señal de destroy , es como lo describiste, solo devuelve el tamaño predeterminado.

Intenta correr:

 while gtk.events_pending(): gtk.main_iteration_do(False) 

justo antes de llamar a window.get_size()