PyGTK - Drag & Drop
Widgets mit zugeordnetem X-Fenster können per Drag & Drop verschoben werden. Im Programm muss zuerst ein Widget als Quelle und / oder Ziel für Drag & Drop festgelegt werden. Das als Quelle definierte Widget kann die gezogenen Daten senden. Das Ziel-Widget akzeptiert es, wenn gezogene Daten darauf abgelegt werden.
Die folgenden Schritte sind beim Einrichten einer Drag & Drop-fähigen Anwendung erforderlich:
Step 1 - Einrichten eines Quell-Widgets.
Step 2 - Die Methode drag_source_set () gibt die Zieltypen für eine Ziehoperation an. -
widget.drag_source_set(start_button_mask, targets, info)
Step 3 - Das Argument start_button_mask gibt eine Bitmaske von Schaltflächen an, mit der der Ziehvorgang gestartet wird.
Step 4 - Das Zielargument ist eine Liste von Tupeln dieser Struktur -
(target, flags, info)
Das Zielargument ist eine Zeichenfolge, die den Drag-Typ darstellt, z. B. text / plain oder image / x-xpixmap.
Step 6 - Die folgenden Flags sind vordefiniert -
- gtk.TARGET_SAME_APP
- gtk.TARGET_SAME_WIDGET
Step 7 - Es gibt keine Einschränkung, da das Flag auf 0 gesetzt ist.
Wenn das Widget nicht als Quelle fungieren muss, kann es deaktiviert werden -
widget.drag_source_unset()
Das Quellensignal sendet Signale aus. In der folgenden Tabelle sind die Signale und ihre Rückrufe aufgeführt.
drag_begin | def drag_begin_cb (Widget, drag_context, Daten): |
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, data): |
drag_end | def drag_end_cb (Widget, drag_context, Daten): |
Einrichten eines Ziel-Widgets
Die Methode drag_dest_set () gibt an, welches Widget gezogene Daten empfangen kann.
widget.drag_dest_set(flags, targets, action)
Der Parameter flags kann eine der folgenden Konstanten annehmen:
gtk.DEST_DEFAULT_MOTION | Dadurch wird überprüft, ob das Ziehen mit der Liste möglicher Ziele und Aktionen dieses Widgets übereinstimmt, und anschließend wird der Drag_status () aufgerufen. |
gtk.DEST_DEFAULT_HIGHLIGHT | Dadurch wird dieses Widget hervorgehoben, solange über dieses Widget gezogen wird |
gtk.DEST_DEFAULT_DROP | Wenn ein Drop auftritt, stimmt das Ziehen mit der Liste der möglichen Ziele und Aktionen dieses Widgets überein drag_get_data()im Namen des Widgets. Rufen Sie an, ob der Abwurf erfolgreich ist oder nichtdrag_finish(). Wenn die Aktion eine Verschiebung war und das Ziehen erfolgreich war, wird TRUE für den Löschparameter an übergebendrag_finish(). |
gtk.DEST_DEFAULT_ALL | Wenn festgelegt, wird angegeben, dass alle Standardaktionen ausgeführt werden sollen. |
Das Ziel ist eine Liste von Tupeln, die Zielinformationen enthalten. Das Aktionsargument ist eine Bitmaske oder eine Kombination aus einem oder mehreren der folgenden Werte:
- gtk.gdk.ACTION_DEFAULT
- gtk.gdk.ACTION_COPY
- gtk.gdk.ACTION_MOVE
- gtk.gdk.ACTION_LINK
- gtk.gdk.ACTION_PRIVATE
- gtk.gdk.ACTION_ASK
Der Handler "Drag-Motion" muss feststellen, ob die Drag-Daten geeignet sind, indem er die Zielziele mit dem übereinstimmt gtk.gdk.DragContext Ziele und optional durch Untersuchen der Drag-Daten durch Aufrufen der drag_get_data()Methode. Dasgtk.gdk.DragContext. drag_status() Methode muss aufgerufen werden, um die zu aktualisieren drag_context Status.
Der "Drag-Drop" -Handler muss das passende Ziel mithilfe von ermitteln drag_dest_find_target() Methode und fragen Sie dann nach den Drag-Daten mit der drag_get_data()Methode. Die Daten sind im Handler "Drag-Data-Received" verfügbar.