Получить выбранный объект из TreeView

2

Я быстро работал над второстепенным (впервые) приложением и столкнулся с препятствием - как получить выбранную строку (данные) из TreeView? Данные в TreeView передаются из списка файлов в каталоге, и мне нужно знать, какие строки были выбраны (и, следовательно, какие файлы были). Каков наилучший способ сделать это?

Вот текущий код:

    self.treeview = self.builder.get_object("treeview")
    select = self.treeview.get_selection()
    select.connect("changed", self.on_tree_selection_changed)

def on_tree_selection_changed(selection):
    model, treeiter = self.treeview.selection-get()
    if treeiter != None:
        print "You selected", model[treeiter][0]
GoGoDo
источник
Приведенный выше код не будет работать, потому что сигнал передает экземпляр класса ( self) в качестве первого аргумента функции. Также неправильный вызов функции. Смотрите мой ответ ниже
Ян Б.

Ответы:

3

Смотрите здесь: http://python-gtk-3-tutorial.readthedocs.org/en/latest/treeview.html

Вы можете получить выборку по событию, подключив объект выбора к событию:

select = tree.get_selection()
select.connect("changed", on_tree_selection_changed)
def on_tree_selection_changed(selection):
    model, treeiter = selection.get_selected()
    if treeiter != None:
        print "You selected", model[treeiter][0]

Редактировать: чтобы установить это в классе окна, используйте следующий код:

class MyTreeView....
    ....Other Stuff...
        self.treeview = self.builder.get_object("treeview")
        select = self.treeview.get_selection()
        select.connect("changed", self.on_tree_selection_changed)

    def on_tree_selection_changed(self, selection):
        model, treeiter = selection.get_selected()
        if treeiter != None:
            print "You selected", model[treeiter][0]

Edit2: если вы хотите выбрать несколько строк, вам нужно использовать, Gtk.TreeSelection.get_selected_rows()который возвращает список Gtk.TreePathэкземпляров всех выбранных строк.

Ян Б.
источник
Хм, я использовал это, но каждый раз, когда что-то выбирается, я получаю следующее: «TypeError: on_tree_selection_changed () принимает ровно 1 аргумент (2 дано)».
GoGoDo
1
Отредактируйте ваш вопрос с соответствующим кодом, который не удается.
Тимо
1
Попробуйте ввести дополнительный аргумент в определении функции ( def on_tree_selection_changed(selection,data):). Затем в функции выведите представление того, что каждый должен видеть (например: print repr(selection)или print repr(data)). Одним из них должна быть правильная структура данных (например, Gtk.TreeSelection) для использования. Размещение кода также поможет.
Ян Б.
Я добавил код в свой вопрос.
GoGoDo
Спасибо! Но теперь это приводит к другой ошибке: «Gtk-CRITICAL **: gtk_tree_selection_get_selected: утверждение` priv-> type! = GTK_SELECTION_MULTIPLE 'не выполнено "». Это работает, когда я устанавливаю его на одиночный выбор, поэтому я предполагаю, что для множественного выбора дерева требуются разные вещи. Извините, что не сказал этого в моем посте.
GoGoDo