# coding: utf-8 from loguru import logger from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QVBoxLayout, QWidget from qfluentwidgets import ( BreadcrumbBar, setFont, ) from app.view.components.linkage_switching import OwnFileLinkageSwitching class OwnFileScrollWidget(QWidget): def __init__(self, parent=None): super().__init__(parent=parent) self.currentPath = "/" self.breadcrumbBar = BreadcrumbBar(self) self.ownFileLinkageSwitching = OwnFileLinkageSwitching("/", self) self.__initWidget() def __initWidget(self): self.setObjectName("OwnFileScrollWidget") self.breadcrumbBar.addItem("/", "/") setFont(self.breadcrumbBar, 18) self.breadcrumbBar.currentItemChanged.connect(self.clickChangeDir) self.breadcrumbBar.setSpacing(15) self.__initLayout() def __initLayout(self): self.vBoxLayout = QVBoxLayout(self) self.vBoxLayout.setContentsMargins(0, 0, 0, 0) self.vBoxLayout.setSpacing(5) self.vBoxLayout.addWidget(self.breadcrumbBar, 0, Qt.AlignmentFlag.AlignTop) self.vBoxLayout.addWidget(self.ownFileLinkageSwitching) def loadDict(self, paths): self.ownFileLinkageSwitching.loadDict(paths) def onChangeDir(self, path): """处理目录变更""" logger.info(f"变更目录: {path}") if path == "": self.currentPath = "/" else: self.currentPath = path self.ownFileLinkageSwitching.loadDict(path) # 更新面包屑导航 displayName = path.split("/")[-1] if path != "/" else "/" self.breadcrumbBar.addItem(displayName, displayName) def clickChangeDir(self, name): """处理面包屑导航项点击事件""" logger.info(f"面包屑导航项点击: {name}") # 获取点击的路径 if name == "": name = "/" pathList = [] for item in self.breadcrumbBar.items: if item.text == name: pathList.append(item.text) break else: pathList.append(item.text) for i in pathList: if i == "": pathList.remove(i) path = "/".join(pathList) if pathList else "/" path = path[1:] if path == "": path = "/" if path == self.currentPath: logger.debug("路径未变化,跳过导航") return self.onChangeDir(path) def refreshCurrentDirectory(self): """刷新当前目录的文件卡片""" logger.info(f"刷新当前目录: {self.currentPath}") self.loadDict(self.currentPath)