[Python-de] pyqt4: Signal QAbstractIemView.currentChanged

Wolfgang Meiners WolfgangMeiners01 at web.de
Mo Jun 17 21:20:39 CEST 2013


Hallo Gruppe,

Ich habe in einem Programm zwei TreeViews (TreeView_Gruppe,
TreeView_Element), die sich aufeinander beziehen. Immer dann, wenn sich
die aktuelle Gruppe ändert, sollen die zur Gruppe gehörigen Elemente
angezeigt werden. Das funktioniert im Prinzip mit folgender
Programmstruktur: (nur der relevante Teil:)



class DBDialog(QDialog, ui_elemente.Ui_DBDialog):

    def __init__(self, parent=None):
        super(DBDialog, self).__init__(parent)
        self.setupUi(self)
        # Die Daten kommen aus einer Datenbank
        # die per SqlAlchemy angesprochen wird
        gruppenListe = \
        session.query(Gruppe).filter(Gruppe.parent_id == None).all()
        gruppenTreeModel = GruppenTreeModel(gruppenListe=gruppenListe)
        self.treeView_Gruppen.setModel(gruppenTreeModel)
        self.treeView_Gruppen.header().\
        setResizeMode(QHeaderView.ResizeToContents)

        elementTreeModel = ElementTreeModel(gruppenListe[0])
        self.treeView_Element.setModel(elementTreeModel)
        self.treeView_Element.header().\
        setResizeMode(QHeaderView.ResizeToContents)

######################################################
# hier wirds interessant
######################################################
        self.connect(self.treeView_Gruppen,
                     SIGNAL("pressed(QModelIndex)"),
                     self.update_treeView_Element)

    def update_treeView_Element(self, index):
        gruppe = index.internalPointer()
        print(gruppe)
        elementTreeModel = ElementTreeModel(gruppe)
        self.treeView_Element.setModel(elementTreeModel)

Das funktioniert solange, wie ich im GruppenTree auf eine Gruppe klicke,
aber nicht, wenn ich die aktuelle Gruppe mit der Tastatur auswähle. Mein
Versuch

        self.connect(self.treeView_Gruppen,
                     SIGNAL("currentChanged(QModelIndex, QModelIndex)"),
                     self.update2_treeView_Element)

mit
    def update2_treeView_Element(self, current, previous):
        gruppe = current.internalPointer()
        print(gruppe)
        elementTreeModel = ElementTreeModel(gruppe)
        self.TreeView_Element.setModel(elementTreeModel)

funktioniert nicht, die Funktion update2_treeView_Element wird gar nicht
erst aufgerufen. Weiß jemand, wie man das richtig macht?
Ich habe mich an die PyQt Dokumentation gehalten, dort steht:

QAbstractItemView.currentChanged (self, QModelIndex current, QModelIndex
previous)

This method is also a Qt slot with the C++ signature void
currentChanged(const QModelIndex&,const QModelIndex&).

This slot is called when a new item becomes the current item. The
previous current item is specified by the previous index, and the new
item by the current index.

If you want to know about changes to items see the dataChanged() signal.

Danke für alle Tipps
Wolfgang


Mehr Informationen über die Mailingliste python-de