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()

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

拖动开始 def Drag_begin_cb(小部件,drag_context,数据):
拖动数据获取 def Drag_data_get_cb(小部件,drag_context,selection_data,信息,时间,数据):
拖拽数据删除 def Drag_data_delete_cb(小部件,drag_context,数据):
拖动结束 def Drag_end_cb(小部件,drag_context,数据):

设置目标小部件

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

目标是包含目标信息的元组列表。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

“drag-motion”处理程序必须通过将目标目标与gtk.gdk.DragContext目标进行匹配以及(可选)通过调用 Drag_get_data ()方法检查拖动数据来确定拖动数据是否合适。gtk.gdk.DragContext 。_ 必须调用drag_status( )方法来更新drag_context状态。

“拖放”处理程序必须使用drag_dest_find_target()方法确定匹配的目标,然后使用drag_get_data()方法请求拖动数据。数据将在“drag-data-received”处理程序中可用。