from PySide6.QtWidgets import QToolBar from PySide6.QtGui import QAction, QIcon from PySide6.QtCore import QSize from codes.common import clibs from codes.common.signal_bus import signal_bus class SToolBar(QToolBar): def __init__(self, parent=None): super().__init__(parent) self.predos() self.init_ui() self.setup_slot() def predos(self): ... def init_ui(self): # switch self.on_icon = QIcon(f"{clibs.base_path}/assets/media/switch_on.png") # 开状态图标 self.off_icon = QIcon(f"{clibs.base_path}/assets/media/switch_off.png") # 关状态图标 self.ac_switch = QAction(self.on_icon, "", self) self.ac_switch.setMenuRole(QAction.MenuRole.NoRole) self.ac_switch.setStatusTip("Switch side bar") self.ac_switch.setToolTip("Ctrl+Alt+T") self.ac_switch.setCheckable(True) # 二态 self.ac_switch.setChecked(True) self.ac_switch.setObjectName("acSwitch") self.setIconSize(QSize(30, 30)) # ← 一行决定图标像素 self.addAction(self.ac_switch) btn = self.widgetForAction(self.ac_switch) # 取出实际 QToolButton btn.setStyleSheet(""" QToolButton { background: transparent; border: none; outline: none; } /* 所有伪状态都透明,不让 Qt 画实心矩形 */ QToolButton::hover, QToolButton::pressed, QToolButton::checked { background: transparent; border: none; outline: none; } """) # homepage self.ac_homepage = QAction() self.ac_homepage.setMenuRole(QAction.MenuRole.NoRole) self.ac_homepage.setStatusTip("Go to home page") self.ac_homepage.setToolTip("Ctrl+Alt+H") self.ac_homepage.setText("主页") self.addAction(self.ac_homepage) # setting self.ac_setting = QAction() self.ac_setting.setMenuRole(QAction.MenuRole.NoRole) self.ac_setting.setStatusTip("Go to setting page") self.ac_setting.setToolTip("Ctrl+Alt+S") self.ac_setting.setText("设置") self.addAction(self.ac_setting) # log self.ac_log = QAction() self.ac_log.setMenuRole(QAction.MenuRole.NoRole) self.ac_log.setStatusTip("Go to log page") self.ac_log.setToolTip("Ctrl+Alt+L") self.ac_log.setText("日志") self.addAction(self.ac_log) # about self.ac_about = QAction() self.ac_about.setMenuRole(QAction.MenuRole.NoRole) self.ac_about.setStatusTip("Go to about page") self.ac_about.setToolTip("Ctrl+Alt+A") self.ac_about.setText("关于") self.addAction(self.ac_about) def setup_slot(self): self.ac_switch.toggled.connect(self.ac_sw) self.ac_homepage.triggered.connect(self.ac_hp) self.ac_setting.triggered.connect(self.ac_sp) self.ac_log.triggered.connect(self.ac_lp) self.ac_about.triggered.connect(self.ac_ap) signal_bus.qa_switch_change.connect(self.change2hide) def ac_sw(self, checked: bool): self.ac_switch.setIcon(self.on_icon if checked else self.off_icon) signal_bus.list_widget_on_off.emit(checked) def ac_hp(self): signal_bus.home_overlay_trigger.emit() def ac_sp(self): signal_bus.stacked_page_switch.emit("w01_setting") signal_bus.stacked_page_switch_setting.emit() def ac_lp(self): signal_bus.stacked_page_switch.emit("w08_log") signal_bus.stacked_page_switch_log.emit() def ac_ap(self): signal_bus.stacked_page_switch.emit("w09_about") signal_bus.stacked_page_switch_about.emit() def change2hide(self): self.ac_switch.setChecked(False) self.ac_switch.setIcon(self.off_icon)