如何设置QTreeView的索引作为树中的第一项自动

如何设置QTreeView的索引作为树中的第一项自动

问题描述:

我有一个程序,当点击一个QTreeView中的项目显示有关该项目的详细信息,并在点击一个按钮,你可以打开该文件,但是如果没有文件选择程序关闭。我试过setCurrentIndex()但是我不确定我是否正确使用它,只能找到PyQt4或C++。如何设置QTreeView的索引作为树中的第一项自动

我runnng PyQt5 Windows 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)) 

另外,我宁愿如果QMessagebox说没有文件被选中出现,我所做的消息框,它是工作,但是我不能让它在程序崩溃显示错误消息之前,在树视图中未选择任何文件时显示。

self.file_model.index(0,0)只是给你的根目录的信息,在你的情况下,C:。你需要做的是等待directoryLoaded(QString)信号被发射,然后选择索引(0, 0)

这里是代码的简化版本。也许你可以在你的代码中进行必要的修改。

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_())