📅  最后修改于: 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-预定义了以下标志-
步骤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.DragContext目标进行匹配,并可选地通过调用drag_get_data()方法来检查拖动数据,来确定拖动数据是否合适。 gtk.gdk.DragContext 。必须调用drag_status( )方法来更新drag_context状态。
在“拖放”处理程序必须使用drag_dest_find_target()方法确定匹配目标,然后要求使用drag_get_data()方法拖拽数据。数据将在“接收到的拖动数据”处理程序中可用。