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