Pygtk: Drag’n drops

Una aplicación con la capacidad de arrastrar-y-soltar primero define y configura el/los control/es para arrastrar-y-soltar. Cada control puede ser una fuente y/o destino para arrastrar-y-soltar. Debe tenerse en cuenta que estos controles han de tener una ventana X asociada.

Los controles fuente pueden enviar datos de arrastrar, permitiendo así al usuario arrastrar cosas desde ellos, mientras que los controles destino pueden recibir datos de arrastrar. Los destinos de arrastrar-y-soltar pueden limitar quiénes pueden enviarles datos, por ejemplo, la propia aplicación o cualquier aplicación (incluyéndose a sí misma).

Para enviar y recibir datos se utilizan señales. Soltar un elemento en un control destino requiere una petición de datos (para el control fuente) y un manejador de datos recibidos (para el control destino). Se pueden conectar manejadores de señal adicionales si se quiere saber cuándo empieza el usuario a arrastrar (en el mismo momento en el que empieza), cuándo se realiza el soltar, y cuándo finaliza el proceso completo de arrastrar-y-soltar (con éxito o no).

La aplicación debe proporcionar los datos a los controles origen cuando se le sean solicitados, lo cual implica tener un manejador de señal para la solicitud de datos. Los controles destino han de tener un manejador de señales de datos recibidos.

Por tanto, un ciclo habitual de arrastrar-y-soltar sería así:

  • Se empieza a arrastrar. El control fuente puede recibir la señal “drag-begin”. Puede configurar el icono de arrastrar, etc.
  • Se mueve lo arrastrado sobre el área de soltar. El control destino puede recibir la señal “drag-motion”.
  • Se suelta el botón. El control destino puede recibir la señal “drag-drop”. El control destino debería solicitar los datos fuente.
  • Se solicitan los datos de arrastrar (al soltar el botón). El control fuente puede recibir la señal “drag-data-get”.
  • Se reciben los datos (puede ser en la misma o en otra aplicación). El control destino puede recibir la señal “drag-data-received”.
  • Se borran los datos de arrastrar (si el arrastre fue un movimiento). El control fuente puede recibir la señal “drag-data-delete”.
  • El proceso arrastrar-y-soltar termina. El control fuente puede recibir la señal “drag-end”.

Obtenido: Aprendizaje del funcionamiento de los drag’n drops en pygtk, así como la creación de un par de ejemplos.

Objetivo: Utilización de los mismos en la interfaz de creación de exámenes.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s