2010-10-29 28 views
3

j'ai une configuration gtk.Treeview comme une source de déplacement:Prévenir la perte de sélection TreeView glisser-déposer

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

et il est TreeSelection est réglé sur SELECT_MULTIPLE.

Mais chaque fois que j'essaie de faire glisser une sélection de plusieurs lignes, le curseur passe à la position actuelle de la souris, en réinitialisant la sélection à la ligne en cours. Même si la souris est au-dessus de l'une des lignes sélectionnées. Il ne fonctionne que lorsque je maintiens le bouton Shift ou Ctrl enfoncé.

Que se passe-t-il?

Edit 1:

J'ai mis en place un TreeView bare-bones pour écarter tous les bugs dans mon code et il fait la même chose.

Edit 2:

J'ai trouvé un extrait de code qui fait ce que je veux. C'est à partir des sources quod libet, appelées MultiDragTreeView.

+0

Pouvez-vous donner un lien pour ce MultiDragTreeView? Est-ce en Python? – saeedgnu

+0

Peut-être que c'est cela, mais le lien de la source ne fonctionne pas: http://www.daa.com.au/pipermail/pygtk/2006-June/012440.html – saeedgnu

+0

Oh, j'ai trouvé 2 classes: [ceci] (http: //www.koders.com/python/fidFF5C3F24E188371DD3A19E2BCF52A6C89BB5CA14.aspx?s=MultiDragTreeView#L26) et [this] (http://www.koders.com/python/fidB8058C60799FF28A4C6AB95D011FA5590A7EE46F.aspx?s=MultiDragTreeView#L87) – saeedgnu

Répondre

1

J'ai trouvé un extrait de code qui fait ce que je veux. C'est à partir des sources quod libet, appelées 'MultiDragTreeView'. Citant la docstring:

"""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

Le lien ne fonctionne plus, mais je pense que c'est là où le code a été déplacé sur GitHub: https://github.com/quodlibet/quodlibet/blob/release-3.9.1/quodlibet/quodlibet/qltk/views.py#L966 –

+1

Quodlibet est sous licence GPL, mais il semble que l'auteur original de ce code l'ait également publié sous la licence MIT: https://kevinmehall.net/2010/pygtk_multi_select_drag_drop –