2017-02-07 190 views
0

我試圖在Mac查找器中顯示文件和文件夾,如列視圖。將分離器手柄設置爲QScrollArea轉角部件?

Mac finder image

我能夠與列表視圖和QFileSystemModel的幫助下獲得的基本結構。然後我將分離器手柄設置爲滾動區域的角部件。我在這裏有兩個問題

  • 當我調整列表視圖,拆分器句柄消失。
  • 即使將分離器手柄寬度設置爲0之後,我也會看到列表視圖的間距爲 。
# -*- coding: utf-8 -*- 

from PyQt4 import QtCore, QtGui 
import os 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class PopulateList(QtGui.QDialog): 
    def __init__(self,parent=None): 
     super().__init__(parent) 
     self.ui = Ui_Form() 
     self.ui.setupUi(self) 
     self.setModel() 
     self.show() 

     self.ui.splitter.setHandleWidth(0)#not working 
     self.ui.listView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) 
     self.ui.listView.setCornerWidget(self.getCornerWidget(self.ui.splitter)) 

     self.ui.closePushButton.clicked.connect(self.close) 
     self.ui.listView.clicked.connect(self.showSubFiles) 

    def getCornerWidget(self, splitter): 
     self.handle=splitter.handle(1) 
     layout=QtGui.QHBoxLayout(self.handle) 
     layout.setSpacing(0) 
     layout.setMargin(0) 

     for i in range(0,2): 
      line = QtGui.QFrame(self.handle) 
      line.setFrameShape(QtGui.QFrame.VLine) 
      layout.addWidget(line) 

     return self.handle 

    def showSubFiles(self, index): 
     root_path = self.model.fileInfo(index).absoluteFilePath() 
     self.model1=QtGui.QFileSystemModel() 
     self.model1.setRootPath(root_path) 
     self.ui.listView_1.setModel(self.model1) 
     self.ui.listView_1.setRootIndex(self.model1.index(root_path)) 

    def setModel(self): 
     root_path=os.path.expanduser("~") 
     self.model=QtGui.QFileSystemModel() 
     self.model.setRootPath(root_path) 
     self.model.setFilter(QtCore.QDir.NoDotAndDotDot | QtCore.QDir.Dirs) 
     self.ui.listView.setModel(self.model) 
     self.ui.listView.setRootIndex(self.model.index(root_path)) 

class Ui_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(602, 365) 
     self.verticalLayout = QtGui.QVBoxLayout(Form) 
     self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) 
     self.splitter = QtGui.QSplitter(Form) 
     self.splitter.setOrientation(QtCore.Qt.Horizontal) 
     self.splitter.setObjectName(_fromUtf8("splitter")) 
     self.listView = QtGui.QListView(self.splitter) 
     self.listView.setObjectName(_fromUtf8("listView")) 
     self.listView_1 = QtGui.QListView(self.splitter) 
     self.listView_1.setObjectName(_fromUtf8("listView_1")) 
     self.verticalLayout.addWidget(self.splitter) 
     self.horizontalLayout = QtGui.QHBoxLayout() 
     self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) 
     spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) 
     self.horizontalLayout.addItem(spacerItem) 
     self.closePushButton = QtGui.QPushButton(Form) 
     self.closePushButton.setObjectName(_fromUtf8("closePushButton")) 
     self.horizontalLayout.addWidget(self.closePushButton) 
     self.verticalLayout.addLayout(self.horizontalLayout) 
     self.verticalLayout.setStretch(0, 1) 

     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     Form.setWindowTitle(_translate("Form", "Form", None)) 
     self.closePushButton.setText(_translate("Form", "Close", None)) 


if __name__ == "__main__": 
    import sys 
    app = QtGui.QApplication(sys.argv) 
    listView=PopulateList() 
    sys.exit(app.exec_()) 

回答

2

您能夠使用QColumnView?正是這樣。
http://doc.qt.io/qt-5/qcolumnview.html

import sys 
from PyQt5 import QtWidgets, QtCore 
app = QtWidgets.QApplication(sys.argv) 
model = QtWidgets.QFileSystemModel() 
view = QtWidgets.QColumnView() 
view.setModel(model) 
model.setRootPath("/") 
view.show() 
sys.exit(app.exec()) 

Screenshot of QColumnView backed by QFileSystemModel

+0

是的,我一直在尋找造成這種小部件。謝謝。順便說一句,我面對我發送的程序中的兩個問題。這是一個Qt問題嗎? – TFA