PyGTK - Arrastar e Soltar

Widgets com X Window associado são capazes de arrastar e soltar. No programa, um widget como fonte e / ou destino para arrastar e soltar deve primeiro ser designado. O widget definido como fonte pode enviar os dados arrastados. O widget de destino aceita quando os dados arrastados são soltos nele.

As etapas a seguir estão envolvidas na configuração de um aplicativo habilitado para arrastar e soltar -

Step 1 - Configurando um widget de fonte.

Step 2 - O método drag_source_set () especifica os tipos de destino para uma operação de arrastar -

widget.drag_source_set(start_button_mask, targets, info)

Step 3 - O argumento start_button_mask especifica uma máscara de bits de botões que inicia a operação de arrastar.

Step 4 - O argumento de destino é uma lista de tuplas desta estrutura -

(target, flags, info)

O argumento de destino é uma string que representa o tipo de arrastar, por exemplo, text / plain ou image / x-xpixmap.

Step 6 - Os seguintes sinalizadores são predefinidos -

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Step 7 - Não haverá limitação, pois o sinalizador é definido como 0.

Se o widget não for obrigado a atuar como fonte, ele pode ser desarmado -

widget.drag_source_unset()

O sinal da fonte emite sinais. A tabela a seguir lista os sinais e seus retornos de chamada.

drag_begin def drag_begin_cb (widget, drag_context, dados):
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, dados):
drag_end def drag_end_cb (widget, drag_context, dados):

Configurando um widget de destino

O método drag_dest_set () especifica qual widget pode receber dados arrastados.

widget.drag_dest_set(flags, targets, action)

O parâmetro flags pode assumir uma das seguintes constantes -

gtk.DEST_DEFAULT_MOTION Isso verifica se o arrastar corresponde à lista de alvos e ações possíveis deste widget e, em seguida, chama o drag_status () conforme apropriado.
gtk.DEST_DEFAULT_HIGHLIGHT Isso desenha um destaque neste widget, desde que arraste sobre ele
gtk.DEST_DEFAULT_DROP Quando ocorre uma queda, se o arrasto corresponder à lista de alvos possíveis e chamadas de ações deste widget drag_get_data()em nome do widget. Quer a queda seja bem-sucedida ou não, liguedrag_finish(). Se a ação foi um movimento e o arrasto foi bem-sucedido, TRUE será passado para o parâmetro de exclusão paradrag_finish().
gtk.DEST_DEFAULT_ALL Se definido, especifica que todas as ações padrão devem ser executadas.

O destino é uma lista de tuplas contendo informações do destino. O argumento de ações é uma máscara de bits ou uma combinação de um ou mais dos seguintes 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

O manipulador de "movimento de arrastar" deve determinar se os dados de arrastar são apropriados, combinando os destinos de destino com o gtk.gdk.DragContext alvos e, opcionalmente, examinando os dados de arrasto chamando o drag_get_data()método. ogtk.gdk.DragContext. drag_status() método deve ser chamado para atualizar o drag_context status.

O manipulador "arrastar e soltar" deve determinar o destino correspondente usando o drag_dest_find_target() método e, em seguida, peça os dados de arrastar usando o drag_get_data()método. Os dados estarão disponíveis no manipulador "arrastar dados recebidos".