导入
创建一个目录查看器图形用户界面
学习如何使用 QFileSystemModel 模块创建一个目录查看器。
1import sys 2from PyQt6.QtWidgets import (QApplication, QMainWindow, 3 QTreeView, QFrame, QFileDialog, QVBoxLayout) 4from PyQt6.QtGui import QFileSystemModel, QAction
1class DisplayDirectory(QMainWindow): 2 def __init__(self): 3 super().__init__() 4 self.tree = QTreeView() 5 self.model = QFileSystemModel() 6 self.initializeUI() 7 8 def initializeUI(self): 9 self.setMinimumSize(500, 400) 10 self.setWindowTitle('Directory Viewer GUI') 11 self.createMenu() 12 self.setupTree() 13 self.show()
1 def createMenu(self): 2 open_dir_act = QAction('Open Directory...', self) 3 open_dir_act.triggered.connect(self.chooseDirectory) 4 root_act = QAction("Return to Root", self) 5 root_act.triggered.connect(self.returnToRootDirectory) 6 # Create menubar 7 menu_bar = self.menuBar() 8 # menu_bar.setNativeMenuBar(False) # ONLY NEEDED FOR MACOS 9 # Create file menu and add actions 10 dir_menu = menu_bar.addMenu('Directories') 11 dir_menu.addAction(open_dir_act) 12 dir_menu.addAction(root_act)
1 def setupTree(self): 2 self.model.setRootPath('') 3 self.tree.setIndentation(10) # Indentation of items 4 self.tree.setModel(self.model) 5 # Set up container and layout 6 frame = QFrame() 7 frame_v_box = QVBoxLayout() 8 frame_v_box.addWidget(self.tree) 9 frame.setLayout(frame_v_box) 10 self.setCentralWidget(frame)
1 def chooseDirectory(self): 2 file_dialog = QFileDialog(self) 3 file_dialog.setFileMode(QFileDialog.FileMode.Directory) 4 directory = QFileDialog.getExistingDirectory(self, "Open Directory", "", QFileDialog.Option.ShowDirsOnly) 5 self.tree.setRootIndex(self.model.index(directory)) 6 7 def returnToRootDirectory(self): 8 self.tree.setRootIndex(self.model.index(''))
1if __name__ == '__main__': 2 app = QApplication(sys.argv) 3 window = DisplayDirectory() 4 sys.exit(app.exec())