112 lines
3.8 KiB
Python
112 lines
3.8 KiB
Python
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)
|
|
|