Pygtk-drag-and-drop

提供:Dev Guides
移動先:案内検索

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.DragContextdrag_context ステータスを更新するには、* drag_status(*)メソッドを呼び出す必要があります。

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