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