📜  PyGTK-拖放

📅  最后修改于: 2020-11-08 08:06:15             🧑  作者: Mango


具有关联的X Window的小部件能够拖放。在程序中,必须首先指定作为拖放源和/或目的地的小部件。定义为源的小部件可以发送拖动的数据。当在其上拖放数据时,目标小部件将接受它。

设置启用拖放的应用程序涉及以下步骤-

步骤1-设置源小部件。

步骤2 -drag_source_set()方法指定拖动操作的目标类型-

widget.drag_source_set(start_button_mask, targets, info)

步骤3 -start_button_mask参数指定启动拖动操作的按钮的位掩码。

步骤4-目标参数是此结构的元组列表-

(target, flags, info)

目标参数是代表拖动类型的字符串,例如text / plain或image / x-xpixmap。

步骤6-预定义了以下标志-

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

步骤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 This checks if the drag matches this widget’s list of possible targets and actions, then calls the drag_status() as appropriate.
gtk.DEST_DEFAULT_HIGHLIGHT This draws a highlight on this widget as long as a drag is over this widget
gtk.DEST_DEFAULT_DROP When a drop occurs, if the drag matches this widget’s list of possible targets and actions call drag_get_data() on behalf of the widget. Whether or not the drop is successful, call drag_finish(). If the action was a move and the drag was successful, then TRUE will be passed for the delete parameter to drag_finish().
gtk.DEST_DEFAULT_ALL If set, specifies that all default actions should be taken.

目标是包含目标信息的元组列表。 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()方法拖拽数据。数据将在“接收到的拖动数据”处理程序中可用。