2010-10-29 20 views
3

我有一个gtk.Treeview设置为拖动源:拖就防止树形选择损失和下降

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

,它的TreeSelection设置为SELECT_MULTIPLE

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

这是怎么回事?

编辑1:

我已经设置了一个最基本的树形视图排除在我的代码任何错误,它做同样的事情。

编辑2:

我发现的代码片段我想要做什么。它来自于现代化的libet资源,被称为MultiDragTreeView

+0

您能给出该MultiDragTreeView的链接吗?它在Python吗? – saeedgnu 2011-03-27 12:23:17

+0

也许是这样,但源代码链接不起作用:http://www.daa.com.au/pipermail/pygtk/2006-June/012440.html – saeedgnu 2011-03-27 12:24:22

+0

哦,我找到了2个类:[this](http: //www.koders.com/python/fidFF5C3F24E188371DD3A19E2BCF52A6C89BB5CA14.aspx?s=MultiDragTreeView#L26)和[this](http://www.koders.com/python/fidB8058C60799FF28A4C6AB95D011FA5590A7EE46F.aspx?s=MultiDragTreeView#L87) – saeedgnu 2011-03-27 12:33:14

回答

1

我发现了一个代码片段,它可以做我想做的。它来自于现代化的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

链接不再有效,但我认为这是代码移到GitHub上的地方:https://github.com/quodlibet/quodlibet/blob/release-3.9.1/quodlibet/quodlibet/qltk/views.py#L966 – 2017-06-10 10:54:38

+1

Quodlibet是GPL许可的,但它看起来像该代码的原始作者也已根据MIT许可证发布它:https://kevinmehall.net/2010/pygtk_multi_select_drag_drop – 2017-06-10 11:02:03