PyGtk 3 Treeview Drag and drop (DnD) - Избегайте отмены выделения при перетаскивании нескольких строк - PullRequest
0 голосов
/ 26 мая 2019

Если вы выберете несколько строк в древовидном представлении (с установленным параметром 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
...