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)

target 参数是一个表示拖动类型的字符串,例如text/plain 或image/x-xpixmap。

步骤 6 − 以下标志是预定义的 −

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

步骤 7 − 没有限制,因为标志设置为 0。

如果小部件不需要充当源,则可以取消设置 −

widget.drag_source_unset()

source signal 发出信号。 下表列出了信号及其回调。

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 如果设置,则指定应执行所有默认操作。

target 目标是包含目标信息的元组列表。 actions 参数是以下一个或多个值的位掩码或组合 −

  • 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"处理程序中可用。