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.DragContext。 drag_status()メソッドを呼び出して更新する必要があります drag_context 状態。
「ドラッグアンドドロップ」ハンドラーは、を使用して一致するターゲットを決定する必要があります drag_dest_find_target() メソッドを使用してから、を使用してドラッグデータを要求します drag_get_data()方法。データは「drag-data-received」ハンドラーで利用できるようになります。