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.