PyGTK - 拖放



拥有关联 X 窗口的小部件能够进行拖放操作。在程序中,必须首先指定一个小部件作为拖放操作的源和/或目标。被定义为源的小部件可以发送被拖动的数据。目标小部件在拖动数据被拖放到它上面时接收数据。

设置启用拖放功能的应用程序涉及以下步骤:

步骤 1 - 设置源小部件。

步骤 2 - `drag_source_set()` 方法指定拖放操作的目标类型。

widget.drag_source_set(start_button_mask, targets, info)

步骤 3 - `start_button_mask` 参数指定启动拖放操作的按钮位掩码。

步骤 4 - `target` 参数是一个包含这种结构的元组列表:

(target, flags, info)

`target` 参数是一个字符串,表示拖动类型,例如 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)

`flags` 参数可以取以下常量之一:

gtk.DEST_DEFAULT_MOTION 这将检查拖动是否与该小部件可能的 target 和 action 列表匹配,然后根据需要调用 `drag_status()`。
gtk.DEST_DEFAULT_HIGHLIGHT 只要拖动位于此小部件上,就会在此小部件上绘制高亮显示。
gtk.DEST_DEFAULT_DROP 当发生放下操作时,如果拖动与该小部件可能的 target 和 action 列表匹配,则代表该小部件调用 `drag_get_data()`。无论放下操作是否成功,都将调用 `drag_finish()`。如果操作是移动并且拖动成功,则将为 `drag_finish()` 的 `delete` 参数传递 `TRUE`。
gtk.DEST_DEFAULT_ALL 如果设置,则指定应执行所有默认操作。

`target` 是一个包含 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

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

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

广告
© . All rights reserved.