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)
目标参数是一个表示拖放类型的字符串,例如text/plain或image/x-xpixmap。
步骤5 -以下标志已预定义-
- gtk.TARGET_SAME_APP
- gtk.TARGET_SAME_WIDGET
步骤6 -由于标志设置为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 | 检查拖拽是否匹配此部件的可能目标和操作,然后根据情况调用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()方法来可选地检查拖动数据来确定拖动数据是否适用。必须调用drag_context.drag_status()方法来更新drag_context状态。
“drag-drop”处理程序必须使用drag_dest_find_target()方法确定匹配的目标,然后使用drag_get_data()方法请求拖动数据。数据将在”drag-data-received”处理程序中可用。