2016-07-07 3 views
0

Ich habe ein Programm, das beim Klicken auf ein Element in einem QTreeView Details über das Element zeigt und mit einem Klick auf eine Schaltfläche können Sie die Datei öffnen, wenn keine Datei vorhanden ist ausgewählt das Programm schließt sich. Ich habe versucht setCurrentIndex(), aber ich bin mir nicht sicher, ob ich es direkt an dem einzigen Beispiel verwende, das ich finden kann, sind PyQt4 oder C++.Wie man den Index von QTreeView automatisch als erstes Element im Baum einstellt

Ich runnng PyQt5 Fenster 7.

self.treeView = QtWidgets.QTreeView(self.centralWidget) 
    self.treeView.setSortingEnabled(True) 
    self.treeView.setObjectName("treeView") 
    self.horizontalLayout_4.addWidget(self.treeView) 
    self.file_model=QtWidgets.QFileSystemModel() 
    self.file_model.setRootPath('C:\My Stuff\Movies') 
    self.treeView.setModel(self.file_model) 
    self.treeView.setRootIndex(self.file_model.index('C:\My Stuff\Movies')) 
    self.treeView.setHeaderHidden(True) 
    self.treeView.hideColumn(1) 
    self.treeView.hideColumn(2) 
    self.treeView.hideColumn(3) 
    self.treeView.setCurrentIndex(self.file_model.index(0,0)) 

Alternativ würde ich es vorziehen, wenn ein QMessagebox erscheinen etwa keine Datei ausgewählt ist, ich habe das Meldungsfeld gemacht und es funktioniert aber ich kann es nicht bekommen um anzuzeigen, wenn in der Baumansicht keine Datei ausgewählt ist, während das Programm abstürzt, bevor die Fehlermeldung angezeigt wird.

Antwort

1

self.file_model.index(0,0) gibt Ihnen nur die Informationen des Stammverzeichnisses, in Ihrem Fall C:. Was Sie tun müssen, ist warten auf das directoryLoaded(QString) Signal ausgegeben werden, dann wählen Sie den Index um (0, 0)

Hier ist die vereinfachte Version des Codes. Vielleicht können Sie die notwendigen Änderungen in Ihrem Code vornehmen.

import os, sys 

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 

if __name__ == '__main__' : 

    app = QApplication(sys.argv) 

    treeView = QTreeView() 
    treeView.setSortingEnabled(True) 
    treeView.setObjectName("treeView") 

    fsm = QFileSystemModel() 
    fsm.setRootPath('C:\My Stuff\Movies') 

    def selectZeroZero(path) : 
     if fsm.rowCount(fsm.index(path)) : 
      treeView.setCurrentIndex(fsm.index(0, 0, fsm.index(path))) 

    fsm.directoryLoaded.connect(selectZeroZero) 

    treeView.setModel(fsm) 
    treeView.setRootIndex(fsm.index('C:\My Stuff\Movies')) 

    treeView.setHeaderHidden(True) 
    treeView.hideColumn(1) 
    treeView.hideColumn(2) 
    treeView.hideColumn(3) 

    treeView.show() 

    sys.exit(app.exec_()) 
Verwandte Themen