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