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 del 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 ): |
GdkEvent 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. 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 le pone el prefijo gtk.gdk. al tipo evento. Por ejemplo gtk.gdk.DRAG_ENTER.
Por tanto, para conectar una función de retrollamada a uno de estos eventos usaríamos algo como:
button.connect("button_press_event", button_press_callback)
|
Esto asume que button es un control GtkButton. Entonces, cuando el ratón este sobre el botón y un botón del ratón se pulse, se llamará a la función button_press_callback. Esta función puede ser definida 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. Consulta la sección Procesamiento Avanzado de Eventos y Señales para 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 detalles sobre la sintáxis 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 |