web-dev-qa-db-fra.com

Obtenir l'objet sélectionné de TreeView

J'ai travaillé sur une application mineure (première fois) avec rapidement et heurté un obstacle. Comment puis-je obtenir la ligne sélectionnée (les données) à partir d'un TreeView? Les données de TreeView sont transmises à partir d'une liste de fichiers d'un répertoire et j'ai besoin de savoir quelles lignes ont été sélectionnées (et donc quels fichiers étaient). Quelle est la meilleure façon de le faire?

Voici le code actuel:

    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]
2
GoGoDo

Voir ici: http://python-gtk-3-tutorial.readthedocs.org/en/latest/treeview.html

Vous pouvez obtenir la sélection sur un événement en connectant un objet de sélection à un événement:

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]

Edit: Pour le configurer dans une classe de fenêtre, utilisez le code suivant:

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: Si vous souhaitez sélectionner plusieurs lignes, vous devez utiliser Gtk.TreeSelection.get_selected_rows(), qui renvoie la liste des instances Gtk.TreePath de toutes les lignes sélectionnées.

3
Ian B.