Además del mecanismo de señales descrito anteriormente, hay un conjunto de eventos que reflejan el mecanismo de eventos de X. Las retrollamadas también se pueden conectar a estos eventos. Estos eventos son:
event button_press_event button_release_event scroll_event motion_notify_event delete_event destroy_event expose_event key_press_event key_release_event enter_notify_event leave_notify_event configure_event focus_in_event focus_out_event map_event unmap_event property_notify_event selection_clear_event selection_request_event selection_notify_event proximity_in_event proximity_out_event visibility_notify_event client_event no_expose_event window_state_event |
Para conectar una función de retrollamada a uno de estos eventos se usa el método connect(), como se ha dicho anteriormente, usando uno de los nombres de eventos anteriores en el parámetro name. La función (o método) de retrollamada para eventos es ligeramente diferente de la usada para señales:
def callback_func(widget, event, callback_data): def callback_meth(self, widget, event, callback_data): |
gdk.Event es un tipo de objetos Python cuyos atributos de tipo indicarán cuál de los eventos anteriores ha ocurrido. Los otros atributos del evento dependerán del tipo de evento. Los valores posibles para los tipos son:
NOTHING DELETE DESTROY EXPOSE MOTION_NOTIFY BUTTON_PRESS _2BUTTON_PRESS _3BUTTON_PRESS BUTTON_RELEASE KEY_PRESS KEY_RELEASE ENTER_NOTIFY LEAVE_NOTIFY FOCUS_CHANGE CONFIGURE MAP UNMAP PROPERTY_NOTIFY SELECTION_CLEAR SELECTION_REQUEST SELECTION_NOTIFY PROXIMITY_IN PROXIMITY_OUT DRAG_ENTER DRAG_LEAVE DRAG_MOTION DRAG_STATUS DROP_START DROP_FINISHED CLIENT_EVENT VISIBILITY_NOTIFY NO_EXPOSE SCROLL WINDOW_STATE SETTING |
Para acceder a estos valores se añade el prefijo gtk.gdk. al tipo de evento. Por ejemplo, gtk.gdk.DRAG_ENTER.
Por tanto, para conectar una función de retrollamada a uno de estos eventos se usaría algo como:
button.connect("button_press_event", button_press_callback)
|
Esto asume que button es un control gtk.Button. Entonces, cuando el ratón esté sobre el botón y se pulse un botón del ratón, se llamará a la función button_press_callback. Esta función se puede definir así:
def button_press_callback(widget, event, data): |
El valor que devuelve esta función indica si el evento debe ser propagado por el sistema de manejo de eventos GTK+. Devolviendo gtk.TRUE indicamos que el evento ha sido procesado, y que no debe ser propagado. Devolviendo gtk.FALSE se continua el procesamiento normal del evento. Es aconsejable consultar la sección Procesamiento Avanzado de Eventos y Señales para obtener más detalles sobre el sistema de propagación.
Las APIs de selección y arrastrar y soltar de GDK también emiten unos cuantos eventos que se reflejan en GTK+ por medio de señales. Consulta Señales en el Control de Orígen y Señales en el Control de Destino para obtener más detalles sobre la sintaxis de las funciones de retrollamada para estas señales:
selection_received selection_get drag_begin_event drag_end_event drag_data_delete drag_motion drag_drop drag_data_get drag_data_received |