PyGTK - Arrastrar y soltar
Los widgets que tienen una ventana X asociada se pueden arrastrar y soltar. En el programa, primero se debe designar un widget como fuente y / o destino para arrastrar y soltar. El widget definido como fuente puede enviar los datos arrastrados. El widget de destino lo acepta cuando se colocan datos arrastrados sobre él.
Los siguientes pasos están involucrados en la configuración de una aplicación habilitada para arrastrar y soltar:
Step 1 - Configuración de un widget de fuente.
Step 2 - El método drag_source_set () especifica los tipos de destino para una operación de arrastre -
widget.drag_source_set(start_button_mask, targets, info)
Step 3 - El argumento start_button_mask especifica una máscara de bits de botones que inicia la operación de arrastre.
Step 4 - El argumento de destino es una lista de tuplas de esta estructura -
(target, flags, info)
El argumento de destino es una cadena que representa el tipo de arrastre, por ejemplo, texto / plano o imagen / x-xpixmap.
Step 6 - Las siguientes banderas están predefinidas -
- gtk.TARGET_SAME_APP
- gtk.TARGET_SAME_WIDGET
Step 7 - No habrá limitación ya que la bandera se establece en 0.
Si no se requiere que el widget actúe como fuente, se puede desarmar:
widget.drag_source_unset()
La señal fuente emite señales. La siguiente tabla enumera las señales y sus devoluciones de llamada.
drag_begin | def drag_begin_cb (widget, drag_context, datos): |
drag_data_get | def drag_data_get_cb (widget, drag_context, selection_data, info, time, data): |
drag_data_delete | def drag_data_delete_cb (widget, drag_context, datos): |
drag_end | def drag_end_cb (widget, drag_context, datos): |
Configurar un widget de destino
El método drag_dest_set () especifica qué widget puede recibir datos arrastrados.
widget.drag_dest_set(flags, targets, action)
El parámetro banderas puede tomar una de las siguientes constantes:
gtk.DEST_DEFAULT_MOTION | Esto verifica si el arrastre coincide con la lista de posibles objetivos y acciones de este widget, luego llama a drag_status () según corresponda. |
gtk.DEST_DEFAULT_HIGHLIGHT | Esto dibuja un punto destacado en este widget siempre que un arrastre esté sobre este widget |
gtk.DEST_DEFAULT_DROP | Cuando se produce una caída, si el arrastre coincide con la lista de posibles objetivos y acciones de este widget, llame drag_get_data()en nombre del widget. Ya sea que la caída sea exitosa o no, llamedrag_finish(). Si la acción fue un movimiento y el arrastre fue exitoso, entonces se pasará TRUE para el parámetro de eliminación adrag_finish(). |
gtk.DEST_DEFAULT_ALL | Si se establece, especifica que se deben realizar todas las acciones predeterminadas. |
El objetivo es una lista de tuplas que contiene información sobre el objetivo. El argumento de acciones es una máscara de bits o una combinación de uno o más de los siguientes valores:
- gtk.gdk.ACTION_DEFAULT
- gtk.gdk.ACTION_COPY
- gtk.gdk.ACTION_MOVE
- gtk.gdk.ACTION_LINK
- gtk.gdk.ACTION_PRIVATE
- gtk.gdk.ACTION_ASK
El controlador de "movimiento de arrastre" debe determinar si los datos de arrastre son apropiados haciendo coincidir los objetivos de destino con el gtk.gdk.DragContext objetivos y, opcionalmente, examinando los datos de arrastre llamando al drag_get_data()método. losgtk.gdk.DragContext. drag_status() se debe llamar al método para actualizar el drag_context estado.
El controlador de "arrastrar y soltar" debe determinar el objetivo coincidente mediante el drag_dest_find_target() método y luego solicite los datos de arrastre usando el drag_get_data()método. Los datos estarán disponibles en el controlador "arrastrar-datos-recibidos".