2013-08-10 1 views
1

Похоже, единственный способ, чтобы получить выбранный элемент в gtk.TreeView() будет на самом деле нажмите на него:Python: Получить gtk.treeview выбор из другого виджета

tree_selection = self.treeview.get_selection() 
    tree_selection.connect('changed', self.my_callback) 
    self.treeview.connect('row-activated', self.my_other_callback) 

Но что, если я перечисляю файлы мое древовидное изображение, и вам нужен элемент меню «Свойства файла»? Или кнопка воспроизведения, которая должна получить доступ к выбранному файлу, чтобы передать имя файла классу/методу игрока?

Бонус вопрос: Как позвонить из my_other_callbacktree_selection.connect('changed', ...) (?, Что, кажется, не возвращает все строки данных ..) или, другими словами, как передать treeview и path на обратный вызов?

ответ

1

Чтобы получить выбор из дерева, позвоните по номеру the get_selected_rows method объекта gtk.TreeSelection. Вы можете позвонить в любое место, откуда вы можете получить доступ к древовидной структуре.

Непонятно, почему вы хотите передать древовидный вид на my_other_callback, так как он, будучи методом вашего класса, может получить к нему доступ как self.treeview. Но если вы хотите сделать это в любом случае, вы можете добавить древовидный (или любой другой объект Python) в качестве дополнительного аргумента connect:

tree_selection.connect('changed', self.my_other_callback, self.treeview) 

Для еще более мелкозернистого контроля, как вызываются функция обратного вызова, использовать лямбда:

tree_selection.connect('changed', lambda *args: self.my_other_callback(self.treeview)) 

Это позволяет использовать один и тот же обработчик для нескольких сигналов без необходимости объявить обработчик как принятие *args.

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