我有一个gtk.Treeview
设置作为拖动源:
self.drag_source_set(gtk.gdk.BUTTON1_MASK, targets, gtk.gdk.ACTION_COPY)
并且TreeSelection
设置为SELECT_MULTIPLE
。
但每次我尝试拖动多行选择时,光标会跳转到当前鼠标位置,将选择重置为当前行。即使鼠标位于所选行之一上方。它仅在我按住 Shift 或 Ctrl 按钮时才有效。
发生了什么事?
修改1:
我已经设置了一个简单的树视图来排除我的代码中的任何错误,它也做同样的事情。
编辑2:
我找到了一个可以实现我想要的代码片段。它来自quod libet来源,名为MultiDragTreeView
。
答案 0 :(得分: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"""
答案 1 :(得分: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)