class PangoFileWidget(PangoDockWidget): def __init__(self, title, parent=None): super().__init__(title, parent) self.setFixedWidth(160) self.file_model = QFileSystemModel() self.file_model.setFilter(QDir.Files | QDir.NoDotAndDotDot) self.file_model.setNameFilters(["*.jpg", "*.png"]) self.file_model.setNameFilterDisables(False) self.th_provider = ThumbnailProvider() self.file_model.setIconProvider(self.th_provider) self.file_view = QListView() self.file_view.setModel(self.file_model) self.file_view.setViewMode(QListView.IconMode) self.file_view.setFlow(QListView.LeftToRight) self.file_view.setIconSize(QSize(150, 150)) self.setWidget(self.file_view) def select_next_image(self): c_idx = self.file_view.currentIndex() idx = c_idx.siblingAtRow(c_idx.row()+1) if idx.row() != -1: self.file_view.setCurrentIndex(idx) def select_prev_image(self): c_idx = self.file_view.currentIndex() idx = c_idx.siblingAtRow(c_idx.row()-1) if idx.row() != -1: self.file_view.setCurrentIndex(idx)
# 如果是文件夹 return self.DirIcon return super(FileIconProvider, self).icon(type_info) def getInfoIcon(self, type_info): if type_info.isDir(): # 文件夹 return self.DirIcon if type_info.isFile() and type_info.suffix() == "txt": # 文件并且是txt return self.TxtIcon return super(FileIconProvider, self).icon(type_info) if __name__ == "__main__": app = QApplication(sys.argv) model = QFileSystemModel() model.setIconProvider(FileIconProvider()) # 设置为自定义的图标提供类 model.setRootPath("") tree = QTreeView() tree.setModel(model) tree.setAnimated(False) tree.setIndentation(20) tree.setSortingEnabled(True) tree.setWindowTitle("Dir View") tree.resize(640, 480) tree.show() sys.exit(app.exec_())