Seite 1 von 1

Probleme mit QTreeView

Verfasst: Donnerstag 4. Dezember 2014, 11:16
von midas
Hallo,

ich will dass wenn ich in meiner QTreeView ein Index erweiter er mit alle Dateien ausgibt die kein Ordner ist. Das funktioniert auch nur leider immer erst beim zweiten Mal.
z.B.
- Verzeichnis
+Verzeichnis 2
Datei1
Datei2

Wenn ich auf das Verzeichnis "Verzeichnis" drücke soll er mir die Dateien 1 + 2 ausgeben. Drücke ich das erste mal drauf passiert nichts. Wiederhole ich den Vorgang gibt er mir die beiden Dateien richtig aus.
An was kann das liegen?

Code: Alles auswählen

from PyQt4 import QtGui
from PyQt4 import QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.resize(600,400)

        self.treeview = QtGui.QTreeView(self)

        self.treeview.model = QtGui.QFileSystemModel()
        self.treeview.model.setRootPath( QtCore.QDir.currentPath() )
        self.treeview.setModel(self.treeview.model)
        self.treeview.setColumnWidth(0, 200)

        self.setCentralWidget(self.treeview)

        self.treeview.expanded.connect(self.on_treeview_expanded)


    def on_treeview_expanded(self, index):
        for i in xrange(self.treeview.model.rowCount(index)):

            indexItem = self.treeview.model.index(i,0, index)

            if not self.treeview.model.isDir(indexItem):
                fileName = self.treeview.model.fileName(indexItem)

                print fileName


if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())



Re: Probleme mit QTreeView

Verfasst: Donnerstag 4. Dezember 2014, 11:34
von BlackJack
Ist jetzt nur geraten, aber eventuell liegt es hier dran?
Qt Docs hat geschrieben:QFileSystemModel uses a separate thread to populate itself so it will not cause the main thread to hang as the file system is being queried. Calls to rowCount() will return 0 until the model populates a directory.
Edit: Und es gibt natürlich ein Signal auf den Objekten das einen Informieren kann wenn ein Verzeichnis in das Modell geladen wurde.

Re: Probleme mit QTreeView

Verfasst: Donnerstag 4. Dezember 2014, 11:49
von MagBen
QFileSystemModel ist auch mit dem Signal expanded verbunden und liest im damit verbundenen Slot den Inhalt des Verzeichnisses ein. Dein MainWindow wird aber zuerst benachrichtigt, sadass beim 1. Klick noch gar nichts gelesen wurde. Du müsstest irgendwie dafür sorgen, dass Deine Methode on_treeview_expanded erst aufgerufen wird, nachdem QFileSystemModel das Signal bekommen hat.

Re: Probleme mit QTreeView

Verfasst: Donnerstag 4. Dezember 2014, 21:44
von midas
Vielen Dank für die Antworten. Das Problem habe ich nun glaube ich verstanden aber einen wirklichen Lösungsansatz fällt mir nun auch nicht ein

Re: Probleme mit QTreeView

Verfasst: Freitag 5. Dezember 2014, 06:53
von MagBen
Du könntest in on_treeview_expanded(self, index) die eigentliche Aktion mit QTimer.singleShot aufrufen.