2014-09-11 81 views
2

我想创建一个小Filebrowser这里描述,但是通过使用PyQt5:Youtube-Video-DescriptionPyQt5 Filebrowser信号插槽:QTreeView则连接到QColumnview

到目前为止布局工作正常。现在我想实现文件在左侧QColumnView上显示的功能。这意味着在QTreeView中点击文件夹的文件可以在右边的File-QColumnView中看到。我没有明白如何创建正确的信号来设置QColumnView的QFileSystemModel的路径索引。此外,如果我只能显示Folder-QTreeView的一个(名称)列,那将会更好。 下面是浏览器的代码:

from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtWidgets import QTreeView, QFileSystemModel, QApplication, QColumnView, QDockWidget, QMainWindow, QTextEdit 
from PyQt5.QtCore import QDir, Qt 

rootpath = QDir.currentPath() 

class Browser(QMainWindow): 
    def __init__(self): 
     super(Browser, self).__init__() 
     self.createDockWindows() 
     self.textEdit = QTextEdit() 
     self.setCentralWidget(self.textEdit) 
    def createDockWindows(self): 
     dock = QDockWidget("Folders", self) 
     dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) 
     #Code to Create FileView Colums and FolderTree 
     self.FileView = QtWidgets.QColumnView() 
     self.FileView.setGeometry(QtCore.QRect(240, 10, 291, 281)) 
     self.FolderTree = QtWidgets.QTreeView() 
     self.FolderTree.setGeometry(QtCore.QRect(10, 10, 221, 281)) 
     FolderTree = self.FolderTree 
     #FolderTree.hidecolumn(1),... ?? to show only name column 

     #include FolderTree to a Dock at the left side 
     dock.setWidget(FolderTree) 
     self.addDockWidget(Qt.LeftDockWidgetArea, dock) 
     #set the model and rootpath for filling the FolderTree from self.ui 
     dirmodel = QFileSystemModel() 
     #set filter to show only folders 
     dirmodel.setFilter(QDir.NoDotAndDotDot | QDir.AllDirs) 
     dirmodel.setRootPath(rootpath) 
     #filemodel and filter for only files on right side 
     filemodel = QFileSystemModel() 
     filemodel.setFilter(QDir.NoDotAndDotDot | QDir.Files) 
     filemodel.setRootPath(rootpath) 
     FolderView = self.FolderTree 
     FolderView.setModel(dirmodel) 
     FolderView.setRootIndex(dirmodel.index(rootpath)) 
     FileView = self.FileView 
     FileView.setModel(filemodel) 
     dock = QDockWidget("Files", self) 
     dock.setWidget(FileView) 
     self.addDockWidget(Qt.RightDockWidgetArea, dock) 

     #important lines for the connection, which does not work  
     self.FolderTree.clicked['QModelIndex'].connect(self.setpathonclick) 
    def setpathonclick(self): 
     currentpathindex = self.FolderTree.currentIndex() 
     self.FileView.setCurrentIndex(currentpathindex) 

if __name__ == '__main__': 
    import sys 
    app = QApplication(sys.argv) 
    w = Browser() 
    w.resize(640, 480) 
    w.show() 
    sys.exit(app.exec_()) 

最后12行是FolderTree和FileOverView的onclick连接的重要线路。

回答

0

您需要设置列视图根指数:

filemodel = QFileSystemModel() 
    filemodel.setFilter(QDir.NoDotAndDotDot | QDir.Files) 
    filemodel.setRootPath(rootpath) 
    ... 
    FileView = self.FileView 
    FileView.setModel(filemodel) 
    FileView.setRootIndex(filemodel.index(rootpath)) 

,然后做更多或更少的单击处理同一件事:

... 
    self.FolderTree.clicked.connect(self.setpathonclick) 

def setpathonclick(self, index): 
    rootpath = self.FolderTree.model().filePath(index) 
    filemodel = self.FileView.model() 
    filemodel.setRootPath(rootpath) 
    self.FileView.setRootIndex(filemodel.index(rootpath))