拖放(Drag and Drop)
优质
小牛编辑
132浏览
2023-12-01
具有关联的X Window的小部件能够拖放。 在程序中,必须首先指定作为拖放源和/或目标的窗口小部件。 定义为源的窗口小部件可以发送拖动的数据。 当拖放数据被删除时,目标小部件接受它。
设置启用拖放的应用程序涉及以下步骤 -
Step 1 - 设置源小部件。
Step 2 - drag_source_set()方法指定拖动操作的目标类型 -
widget.drag_source_set(start_button_mask, targets, info)
Step 3 - start_button_mask参数指定用于启动拖动操作的按钮的位掩码。
Step 4 - 目标参数是此结构的元组列表 -
(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): |
设置目标小组件
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
“拖动运动”处理程序必须确定是否拖拽数据是通过与所述目的地目标匹配适当gtk.gdk.DragContext由通过调用检查拖动数据目标和任选drag_get_data()方法。 gtk.gdk.DragContext 。 必须调用drag_status( )方法来更新drag_context状态。
“拖放”处理程序必须使用drag_dest_find_target()方法确定匹配的目标,然后使用drag_dest_find_target()方法请求拖动数据。 数据将在“drag-data-received”处理程序中提供。