PyGTK-ドラッグアンドドロップ

Xウィンドウが関連付けられているウィジェットは、ドラッグアンドドロップが可能です。プログラムでは、ドラッグアンドドロップのソースおよび/または宛先としてウィジェットを最初に指定する必要があります。ソースとして定義されたウィジェットは、ドラッグされたデータを送信できます。ドラッグされたデータがドロップされると、宛先ウィジェットはそれを受け入れます。

次の手順は、ドラッグアンドドロップ対応のアプリケーションの設定に関係しています-

Step 1 −ソースウィジェットの設定。

Step 2 − drag_source_set()メソッドは、ドラッグ操作のターゲットタイプを指定します−

widget.drag_source_set(start_button_mask, targets, info)

Step 3 − start_button_mask引数は、ドラッグ操作を開始するボタンのビットマスクを指定します。

Step 4 −ターゲット引数はこの構造のタプルのリストです−

(target, flags, info)

ターゲット引数は、ドラッグタイプを表す文字列です(例:text / plainまたはimage / x-xpixmap)。

Step 6 −以下のフラグは事前定義されています−

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Step 7 −フラグは0に設定されているため、制限はありません。

ウィジェットがソースとして機能する必要がない場合は、設定を解除できます-

widget.drag_source_unset()

ソース信号は信号を発信します。次の表に、シグナルとそのコールバックを示します。

drag_begin def drag_begin_cb(widget、drag_context、data):
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、data):

宛先ウィジェットの設定

drag_dest_set()メソッドは、ドラッグされたデータを受信できるウィジェットを指定します。

widget.drag_dest_set(flags, targets, action)

flagsパラメータは、次の定数のいずれかを取ることができます-

gtk.DEST_DEFAULT_MOTION これにより、ドラッグがこのウィジェットの可能なターゲットとアクションのリストと一致するかどうかがチェックされ、必要に応じてdrag_status()が呼び出されます。
gtk.DEST_DEFAULT_HIGHLIGHT ドラッグがこのウィジェット上にある限り、これはこのウィジェットにハイライトを描画します
gtk.DEST_DEFAULT_DROP ドロップが発生したときに、ドラッグがこのウィジェットの可能なターゲットとアクションのリストと一致する場合は、 drag_get_data()ウィジェットに代わって。ドロップが成功したかどうかにかかわらず、drag_finish()。アクションが移動でドラッグが成功した場合、削除パラメーターにTRUEが渡されます。drag_finish()
gtk.DEST_DEFAULT_ALL 設定されている場合、すべてのデフォルトアクションを実行する必要があることを指定します。

ターゲットは、ターゲット情報を含むタプルのリストです。アクション引数は、次の値の1つ以上のビットマスクまたは組み合わせです-

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

「ドラッグモーション」ハンドラーは、宛先ターゲットをと照合することにより、ドラッグデータが適切かどうかを判断する必要があります。 gtk.gdk.DragContext ターゲットを呼び出し、オプションでドラッグデータを調べて drag_get_data()方法。ザ・gtk.gdk.DragContextdrag_status()メソッドを呼び出して更新する必要があります drag_context 状態。

「ドラッグアンドドロップ」ハンドラーは、を使用して一致するターゲットを決定する必要があります drag_dest_find_target() メソッドを使用してから、を使用してドラッグデータを要求します drag_get_data()方法。データは「drag-data-received」ハンドラーで利用できるようになります。