2010-10-29 4 views
3

Я имею установку gtk.Treeview в качестве источника сопротивления:Предотвращение потери Treeview выбор на перетаскиванием

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

и это TreeSelection устанавливается в SELECT_MULTIPLE.

Но каждый раз, когда я пытаюсь перетащить несколько строк, курсор переместится в текущую позицию мыши, сбросив выделение до текущей строки. Хотя мышь находится над одним из выбранных строк. Он работает только тогда, когда я удерживаю Shift или Ctrl кнопка вниз.

Что происходит?

Edit 1:

Я создал скелетное TreeView, чтобы исключить любые ошибки в своем коде, и он делает то же самое.

Edit 2:

Я нашел фрагмент кода, который делает то, что я хочу. Это из источников quod libet, называемых MultiDragTreeView.

+0

Можете ли вы дать ссылку на этот MultiDragTreeView? Это в Python? – saeedgnu

+0

Возможно, это так, но ссылка на источник не работает: http://www.daa.com.au/pipermail/pygtk/2006-June/012440.html – saeedgnu

+0

О, я нашел 2 класса: [это] (http: //www.koders.com/python/fidFF5C3F24E188371DD3A19E2BCF52A6C89BB5CA14.aspx?s=MultiDragTreeView#L26) и [это] (http://www.koders.com/python/fidB8058C60799FF28A4C6AB95D011FA5590A7EE46F.aspx?s=MultiDragTreeView#L87) – saeedgnu

ответ

1

Я нашел фрагмент кода, который делает то, что я хочу. Это из источников libd quod, называемых '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 –

+1

Quodlibet лицензирован GPL, но похоже, что оригинальный автор этого кода также выпустил его под лицензией MIT: https://kevinmehall.net/2010/pygtk_multi_select_drag_drop –

Смежные вопросы