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

时间:2016-07-07 07:30:33

标签: python pyqt5 qtreeview

我有一个程序,当点击QTreeView中的项目显示有关该项目的详细信息时,单击按钮可以打开该文件,但是如果没有选择文件,程序将关闭。我已经尝试了setCurrentIndex()但是我不确定我是否在我能找到的唯一示例中使用它是PyQt4或C ++。

我跑了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说没有选择文件,我已经制作了消息框并且它正在工作但是当树视图中没有选择文件时我无法显示它程序在显示错误消息之前崩溃。

1 个答案:

答案 0 :(得分:1)

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