PyGTK - przeciągnij i upuść

Widżety z powiązanymi X Window można przeciągać i upuszczać. W programie należy najpierw wyznaczyć widget jako źródło i / lub miejsce docelowe do przeciągania i upuszczania. Widżet zdefiniowany jako źródło może wysyłać przeciągane dane. Widżet docelowy akceptuje to, gdy przeciągane dane są na niego upuszczane.

Poniższe kroki obejmują konfigurację aplikacji obsługującej przeciąganie i upuszczanie -

Step 1 - Konfigurowanie widgetu źródłowego.

Step 2 - Metoda drag_source_set () określa docelowe typy operacji przeciągania -

widget.drag_source_set(start_button_mask, targets, info)

Step 3 - Argument start_button_mask określa maskę bitową przycisków, która rozpoczyna operację przeciągania.

Step 4 - Argument docelowy to lista krotek tej struktury -

(target, flags, info)

Argumentem docelowym jest łańcuch reprezentujący typ przeciągania, na przykład text / plain lub image / x-xpixmap.

Step 6 - Wstępnie zdefiniowano następujące flagi -

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Step 7 - Nie będzie ograniczeń, ponieważ flaga jest ustawiona na 0.

Jeśli widżet nie musi działać jako źródło, można go wyłączyć -

widget.drag_source_unset()

Sygnał źródłowy emituje sygnały. Poniższa tabela zawiera listę sygnałów i ich wywołania zwrotne.

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

Konfigurowanie widżetu miejsca docelowego

Metoda drag_dest_set () określa, który widget może odbierać przeciągane dane.

widget.drag_dest_set(flags, targets, action)

Parametr flags może przyjmować jedną z następujących stałych -

gtk.DEST_DEFAULT_MOTION Sprawdza, czy przeciąganie pasuje do listy możliwych celów i działań tego widgetu, a następnie wywołuje metodę drag_status (), jeśli jest to wymagane.
gtk.DEST_DEFAULT_HIGHLIGHT Powoduje to zaznaczenie tego widżetu, o ile przeciągnięcie jest nad tym widżetem
gtk.DEST_DEFAULT_DROP Gdy nastąpi upuszczenie, jeśli przeciągnięcie pasuje do listy możliwych celów i działań tego widżetu drag_get_data()w imieniu widżetu. Niezależnie od tego, czy upuszczenie się powiedzie, zadzwońdrag_finish(). Jeśli akcja była ruchem i przeciąganie się powiodło, wówczas wartość TRUE zostanie przekazana dla parametru delete dodrag_finish().
gtk.DEST_DEFAULT_ALL Jeśli jest ustawiona, określa, że ​​powinny zostać podjęte wszystkie domyślne działania.

Celem jest lista krotek zawierających informacje o celu. Argument akcji jest maską bitową lub kombinacją jednej lub kilku z następujących wartości -

  • gtk.gdk.ACTION_DEFAULT
  • gtk.gdk.ACTION_COPY
  • gtk.gdk.ACTION_MOVE
  • gtk.gdk.ACTION_LINK
  • gtk.gdk.ACTION_PRIVATE
  • gtk.gdk.ACTION_ASK

Procedura obsługi ruchu przeciągania musi określić, czy dane przeciągania są odpowiednie, dopasowując cele docelowe z rozszerzeniem gtk.gdk.DragContext cele i opcjonalnie, sprawdzając dane przeciągania, wywołując metodę drag_get_data()metoda. Plikgtk.gdk.DragContext. drag_status(), aby zaktualizować plik drag_context status.

Procedura obsługi „przeciągnij-upuść” musi określić pasujący cel przy użyciu drag_dest_find_target() a następnie poproś o dane przeciągania za pomocą drag_get_data()metoda. Dane będą dostępne w module obsługi „przeciągnij-dane-odebrane”.