Pygtk-drag-and-drop
PyGTK-ドラッグアンドドロップ
X Windowが関連付けられているウィジェットは、ドラッグアンドドロップが可能です。 プログラムでは、最初にドラッグアンドドロップのソースまたは宛先としてウィジェットを指定する必要があります。 ソースとして定義されたウィジェットは、ドラッグされたデータを送信できます。 目的のウィジェットは、ドラッグされたデータがドロップされたときに受け入れます。
次の手順は、ドラッグアンドドロップ対応のアプリケーションのセットアップに関係しています-
- ステップ1 *-ソースウィジェットのセットアップ。
- ステップ2 *-drag_source_set()メソッドは、ドラッグ操作のターゲットタイプを指定します-
widget.drag_source_set(start_button_mask, targets, info)
- ステップ3 *-start_button_mask引数は、ドラッグ操作を開始するボタンのビットマスクを指定します。
- ステップ4 *-ターゲット引数は、この構造のタプルのリストです-
(target, flags, info)
ターゲット引数は、text/plainやimage/x-xpixmapなどのドラッグタイプを表す文字列です。
- ステップ6 *-次のフラグが事前に定義されています-
- gtk.TARGET_SAME_APP
- gtk.TARGET_SAME_WIDGET
- ステップ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)
フラグパラメータは、次の定数のいずれかを取ることができます-
gtk.DEST_DEFAULT_MOTION | This checks if the drag matches this widget’s list of possible targets and actions, then calls the drag_status() as appropriate. |
gtk.DEST_DEFAULT_HIGHLIGHT | This draws a highlight on this widget as long as a drag is over this widget |
gtk.DEST_DEFAULT_DROP | When a drop occurs, if the drag matches this widget’s list of possible targets and actions call drag_get_data() *on behalf of the widget. Whether or not the drop is successful, call drag_finish(). If the action was a move and the drag was successful, then TRUE will be passed for the delete parameter to *drag_finish(). |
gtk.DEST_DEFAULT_ALL | If set, specifies that all default actions should be taken. |
ターゲットは、ターゲット情報を含むタプルのリストです。 アクション引数は、次の値のビットマスクまたは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_context ステータスを更新するには、* drag_status(*)メソッドを呼び出す必要があります。
「ドラッグドロップ」ハンドラーは、* drag_dest_find_target()メソッドを使用して一致するターゲットを決定し、 drag_get_data()*メソッドを使用してドラッグデータを要求する必要があります。 データは、「drag-data-received」ハンドラーで使用可能になります。