PyGTK - Drag and Drop(拖放)

  • 简述

    具有关联 X Window 的小部件能够拖放。在程序中,必须首先指定作为拖放源和/或目标的小部件。定义为源的小部件可以发送拖动的数据。目标小部件在拖放数据时接受它。
    设置启用拖放功能的应用程序涉及以下步骤 -
    步骤 1− 设置源小部件。
    步骤 2- drag_source_set() 方法指定拖动操作的目标类型 -
    
    widget.drag_source_set(start_button_mask, targets, info)
    
    步骤 3− start_button_mask 参数指定开始拖动操作的按钮的位掩码。
    步骤 4- 目标参数是这个结构的元组列表 -
    
    (target, flags, info)
    
    target 参数是一个表示拖动类型的字符串,例如 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 这将检查拖动是否与此小部件的可能目标和操作列表匹配,然后酌情调用 drag_status()。
    gtk.DEST_DEFAULT_HIGHLIGHT 只要在此小部件上拖动,就会在此小部件上突出显示
    gtk.DEST_DEFAULT_DROP 发生拖放时,如果拖动匹配此小部件的可能目标列表和操作调用drag_get_data()代表小部件。不管drop是否成功,调用drag_finish(). 如果动作是移动并且拖动成功,则将 TRUE 传递给 delete 参数drag_finish().
    gtk.DEST_DEFAULT_ALL 如果设置,则指定应采取所有默认操作。
    目标是包含目标信息的元组列表。动作参数是以下一个或多个值的位掩码或组合 -
    • 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()方法。数据将在“drag-data-received”处理程序中可用。