Если вы выберете несколько строк в древовидном представлении (с установленным параметром Gtk.SelectionMode.MULTIPLE
), если вы щелкнете по одной из выбранных строк, чтобы перетащить весь выбор ... все строки будут отменены, кроме той, по которой щелкают.Таким образом, вы в конечном итоге перетаскиваете только один ряд.Вот несколько строк кода (я пропустил часть DnD, так как она отлично работает).
...
def __init__(self):
# Create a new window
Gtk.Window.__init__(self, title="Hello World")
self.set_default_size(500, 500)
...
# create a liststore with one string column to use as the model
self.store = Gtk.TreeStore(str)
...
# create the TreeView using liststore
self.treeview = Gtk.TreeView(self.store)
# allow multiple selection
sel = self.treeview.get_selection()
sel.set_mode(Gtk.SelectionMode.MULTIPLE)
sel.set_select_function(self.my_sel_func, None)
...
def my_sel_func(self, selection, model, path, is_selected, data):
new_sel_iter = model.get_iter(path)
model, pathlist = selection.get_selected_rows()
is_allowed = True
for path_i in pathlist:
iter = model.get_iter(path_i)
# Check if iter in pathlist is_ancestor of the new_sel_iter
if model.is_ancestor(iter, new_sel_iter):
is_allowed = False
break
return is_allowed