TransWikia.com

Conectar señales usando GObjectIntrospection

Stack Overflow en español Asked by Trauma on January 10, 2021

Estoy siguiendo este tutorial sobre python + GObjectIntrospection. El código es muy simple:

import gi
gi.require_version( 'Gtk', '3.0' )
from gi.repository import Gtk

class Handler:
 def onButtonPressed( self, button ):
  print( 'Boton pulsado ... ' )

 def onDestroy( self, *args ):
  Gtk.main_quit( )

builder = Gtk.Builder( )
builder.add_from_file( '.archivo.glade' )

builder.connect_signals( Handler( ) )
window = builder.get_object( 'MainWindow' )
window.show_all( )

Gtk.main( )

Al ejecutarlo con python3 main.py, aparenta ejecutarse bien, pero al cerrar la ventana (pulsando en el icono de su barra de título), dicha ventana efectivamente se cierra, pero el programa no finaliza. Da la sensación de que no se llama a la función Gtk.main_quit( ).

En el depurador, colocando un punto de interrupción en la línea

Gtk.main_quit( )

observo que nunca se entra en ese punto. La ejecución no llega ahí. Da la sensación de que onDestroy no es la señal a la que conectarse.

Por supuesto, he intentado cambiarlo a ‘destroy’, ‘on_destroy’, ‘Destroy’, y alguna mas, pero ninguna ha funcionado.

One Answer

Asegurate de declarar las señales en Glade. El mismo tutorial muestra que el archivo .glade se debe cambiar para definir las señales onDestroy y onButtonPressed:

...
    <signal name="destroy" handler="onDestroy" swapped="no"/>
...
        <signal name="pressed" handler="onButtonPressed" swapped="no"/>
...

En este diff se pueden observar en detalle las diferencias entre los dos ejemplos de archivo .glade del tutorial.

Answered by Hernán Alarcón on January 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP