3

我有一个gtk.Treeview设置作为拖动源:

self.drag_source_set(gtk.gdk.BUTTON1_MASK, targets, gtk.gdk.ACTION_COPY)

TreeSelection设置为SELECT_MULTIPLE.

但是每次我尝试拖动多行选择时,光标都会跳转到当前鼠标位置,将选择重置为当前行。即使鼠标位于选定行之一的上方。它仅在我按住ShiftCtrl按钮时才有效。

到底是怎么回事?

编辑1:

我已经建立了一个简单的树视图来排除我的代码中的任何错误,它做同样的事情。

编辑2:

我找到了一个可以满足我要求的代码片段。它来自 quod libet 来源,称为MultiDragTreeView.

4

2 回答 2

1

我找到了一个可以满足我要求的代码片段。它来自 quod libet 源,称为'MultiDragTreeView'。引用文档字符串:

"""TreeView with multirow drag support:
* Selections don't change until button-release-event...
* Unless they're a Shift/Ctrl modification, then they happen immediately
* Drag icons include 3 rows/2 plus a "and more" count"""
于 2013-01-13T13:05:30.667 回答
0

我找到了一种解决方法,如果选择了项目,请从选择中删除该项目并将控制掩码添加到事件中。:

def on_iconview_button_press_event(widget, event):
    if event.type != Gdk.EventType.BUTTON_PRESS or event.button != 1:
        return
    if (event.state & Gdk.ModifierType.CONTROL_MASK):#do no changes if ctrl is pressed
        return
    path = widget.get_path_at_pos(event.x, event.y)
    if not path:
        return
    if widget.path_is_selected(path):
        widget.unselect_path(path)
        event.state |= Gdk.ModifierType.CONTROL_MASK
        return
iconview.connect('button-press-event', on_iconview_button_press_event)
于 2019-08-13T02:44:24.997 回答