Pygtk 简明教程
PyGTK - Drag and Drop
与 X 窗口关联的小部件支持拖放操作。在程序中,小部件作为拖放操作的源和/或目标时必须首先进行指定。定义为源的小部件可发送被拖拽的数据。目标小部件在拖拽数据被放置到其上的时候接收数据。
在设置启用了拖放操作的应用程序时涉及以下步骤 −
Step 1 − 设置源小部件。
Step 2 − drag_source_set() 方法为拖放操作指定目标类型 −
widget.drag_source_set(start_button_mask, targets, info)
Step 3 − start_button_mask 参数指定启动拖放操作的按钮的位掩码。
Step 4 − target 参数是由此结构组成的元组列表 −
(target, flags, info)
target 参数是表示拖放类型的字符串,例如 text/plain 或 image/x-xpixmap。
Step 6 − 预定义了以下标记 −
-
gtk.TARGET_SAME_APP
-
gtk.TARGET_SAME_WIDGET
Step 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): |
Setting up a Destination Widget
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 作为 delete 参数传递给 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”处理程序中可用。