如何设置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_())