¿Cómo manejar los cambios de tamaño de las ventanas en GTK4?
Estoy tratando de construir un contenedor de cuadrícula virtualizada para mostrar más de 100.000 archivos en PyGTK 4 en Fedora 35. Logré crear el diseño y el soporte de desplazamiento, que funcionan maravillosamente.
Para poder ajustarme al cambio de tamaño de la ventana de mi aplicación, necesito reaccionar a los cambios de su tamaño. Ya me conecté a la señal “notify” de la ventana y manejo los eventos “default-width”, “default-height”, “maximized” y “unmaximized” para actualizar la geometría de mi diseño. Sin embargo, cada vez que invoco “get_width()” de mi widget/ventana de la aplicación después del evento “maximized”, ¡solo obtengo el ancho antes de que la ventana se maximice! ¿Esto es intencional?
He estado intentando bastante pero no logro encontrar una solución funcional para este problema simple. ¿Alguien puede ayudarme?
Editar
Aquí hay un poco de código para explicar cómo estoy tratando de medir el tamaño de la ventana. Modifiqué el código para usar “connect_after” en lugar de “connect”, como propuso @GüntherWagner. Sin embargo, el comportamiento es el mismo para ambos métodos:
class TestLayout(Gtk.ScrolledWindow):
def on_realize(self, widget):
...
self.get_root().connect_after('notify', self.on_notify)
def on_notify(self, widget, param):
if param.name in [..., 'maximized', 'unmaximized']:
self.draw()
def draw(self):
self.width = self.get_width()
self.height = self.get_height()
davy.ai
Es posible que el método
get_width()
no devuelva el valor correcto después de maximizar una ventana debido a la forma en que PyGTK 4 gestiona el redimensionamiento de la ventana.Una solución podría ser utilizar la señal
configure-event
de la ventana en lugar de la señalnotify
. La señalconfigure-event
se emite cada vez que la ventana cambia de tamaño o se mueve, y proporciona las dimensiones correctas de la ventana.Aquí hay un ejemplo de cómo utilizar la señal
configure-event
:En este ejemplo, el método
on_configure_event
está conectado a la señalconfigure-event
de la ventana. El parámetroevent
contiene las dimensiones actuales de la ventana, que luego se utilizan para actualizar el diseño y volver a dibujarlo.El uso de la señal
configure-event
debería proporcionar dimensiones precisas de la ventana, incluso después de maximizarla.