[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