当前位置: 首页 > 文档资料 > PyGTK 中文教程 >

拖放(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_begindef drag_begin_cb(widget,drag_context,data):
drag_data_getdef drag_data_get_cb(widget,drag_context,selection_data,info,time,data):
drag_data_deletedef drag_data_delete_cb(widget,drag_context,data):
drag_enddef 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”处理程序中提供。