Capítulo 22. Arrastrar y Soltar

Tabla de contenidos

22.1. Descripción General de Arrastrar y Soltar
22.2. Propiedades de Arrastrar y Soltar
22.3. Métodos de Arrastrar y Soltar
22.3.1. Configuración del Control Origen
22.3.2. Señales en el Control Fuente
22.3.3. Configuración de un Control Destino
22.3.4. Señales en el Control Destino

PyGTK posee un conjunto de funciones de alto nivel de comunicación entre procesos a través del sistema arrastrar-y-soltar. PyGTK puede realizar arrastrar-y-soltar sobre los protocolos de bajo nivel Xdnd y arrastrar-y-soltar Motif.

22.1. Descripción General de Arrastrar y Soltar

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".

Hay algunos pasos intermedios adicionales pero se verán en detalle un poco más tarde.