完成日志界面的制作
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from PySide6.QtGui import QFocusEvent
|
||||
from PySide6.QtWidgets import QListWidget, QListWidgetItem
|
||||
from PySide6.QtCore import Qt, QEvent
|
||||
from PySide6.QtCore import Qt
|
||||
|
||||
from codes.common import clibs
|
||||
from codes.common.signal_bus import signal_bus
|
||||
@@ -18,6 +18,7 @@ class SListWidget(QListWidget):
|
||||
...
|
||||
|
||||
def init_ui(self):
|
||||
self.setMinimumWidth(150)
|
||||
for item in clibs.listW_items:
|
||||
_ = QListWidgetItem(item)
|
||||
_.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
@@ -25,7 +26,9 @@ class SListWidget(QListWidget):
|
||||
|
||||
def setup_slot(self):
|
||||
self.itemClicked.connect(self.item_clicked)
|
||||
signal_bus.qa_stacked_page_switch.connect(self.hide)
|
||||
signal_bus.stacked_page_switch_setting.connect(self.qa_hide)
|
||||
signal_bus.stacked_page_switch_log.connect(self.qa_hide)
|
||||
signal_bus.stacked_page_switch_about.connect(self.qa_hide)
|
||||
signal_bus.list_widget_on_off.connect(self.lw_show_hide)
|
||||
|
||||
def item_clicked(self, item):
|
||||
@@ -40,6 +43,10 @@ class SListWidget(QListWidget):
|
||||
else:
|
||||
self.hide()
|
||||
|
||||
def qa_hide(self):
|
||||
self.hide()
|
||||
signal_bus.qa_switch_change.emit(False)
|
||||
|
||||
def focusOutEvent(self, event: QFocusEvent):
|
||||
self.clearSelection()
|
||||
super().focusOutEvent(event)
|
||||
@@ -1,11 +1,12 @@
|
||||
from pathlib import Path
|
||||
import importlib.util
|
||||
from PySide6.QtWidgets import QStackedWidget
|
||||
|
||||
from PySide6.QtWidgets import QStackedWidget, QWidget, QLabel
|
||||
from PySide6.QtCore import Qt
|
||||
|
||||
from codes.common import clibs
|
||||
from codes.common.signal_bus import signal_bus
|
||||
from codes.ui.stacked_pages.w01_setting import W01Setting
|
||||
from codes.ui.stacked_pages.w08_log import W08Log
|
||||
from codes.ui.stacked_pages.w09_about import W09About
|
||||
from codes.ui.stacked_pages.w10_practical import W10Practical
|
||||
from codes.ui.stacked_pages.w20_efficiency import W20Efficiency
|
||||
from codes.ui.stacked_pages.w30_financial import W30Financial
|
||||
|
||||
|
||||
class SStackedWidget(QStackedWidget):
|
||||
@@ -17,46 +18,23 @@ class SStackedWidget(QStackedWidget):
|
||||
self.setup_slot()
|
||||
|
||||
def predos(self):
|
||||
self.page_list = {}
|
||||
self.page_list = {"w01_setting": W01Setting(), "w08_log": W08Log(), "w09_about": W09About(), "w10_practical": W10Practical(), "w20_efficiency": W20Efficiency(), "w30_financial": W30Financial()}
|
||||
|
||||
def init_ui(self):
|
||||
# stacked widget 1x: 10为一级按钮页,其余为二级按钮页,2-9同理 | 0x. 日志/设置/关于等页面
|
||||
self.load_pages()
|
||||
for page_id, widget in self.page_list.items():
|
||||
widget.setObjectName(page_id)
|
||||
self.addWidget(widget)
|
||||
|
||||
w = self.page_list.get("w01_setting")
|
||||
self.setCurrentWidget(w)
|
||||
|
||||
def setup_slot(self):
|
||||
signal_bus.init_stacked_page.connect(self.set_current_page)
|
||||
signal_bus.qa_stacked_page_switch.connect(self.set_current_page)
|
||||
signal_bus.stacked_page_switch.connect(self.set_current_page)
|
||||
signal_bus.list_widget_click.connect(self.set_current_page)
|
||||
|
||||
def set_current_page(self, page_id: str):
|
||||
w = self.page_list.get(page_id)
|
||||
self.setCurrentWidget(w)
|
||||
signal_bus.current_stacked_page.emit(page_id)
|
||||
|
||||
def load_pages(self):
|
||||
def to_camel(snake: str) -> str:
|
||||
# w01_setting -> W01Setting
|
||||
return "".join(word.capitalize() for word in snake.split('_'))
|
||||
|
||||
def instantiate(pyFile: Path, className: str) -> QWidget | None:
|
||||
try:
|
||||
spec = importlib.util.spec_from_file_location(pyFile.stem, pyFile)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
cls = getattr(module, className)
|
||||
if issubclass(cls, QWidget):
|
||||
return cls()
|
||||
except Exception as e:
|
||||
print(f"加载 {pyFile} 失败: {e}")
|
||||
|
||||
pages_dir = clibs.base_path / "codes/ui/stacked_pages/"
|
||||
for py_file in pages_dir.glob("w*.py"):
|
||||
page_id = py_file.stem # w01_setting
|
||||
class_name = to_camel(page_id) # W01Setting
|
||||
widget = instantiate(py_file, class_name)
|
||||
if widget:
|
||||
widget.setObjectName(page_id) # 用于 findChild / 切换
|
||||
self.addWidget(widget)
|
||||
self.page_list[page_id] = widget
|
||||
@@ -6,7 +6,6 @@ from codes.common import clibs
|
||||
from codes.common.signal_bus import signal_bus
|
||||
|
||||
|
||||
|
||||
class SToolBar(QToolBar):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
@@ -85,24 +84,26 @@ class SToolBar(QToolBar):
|
||||
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_stacked_page_switch.connect(self.change2hide)
|
||||
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)
|
||||
print(f"checked: {checked}")
|
||||
signal_bus.list_widget_on_off.emit(checked)
|
||||
|
||||
def ac_hp(self):
|
||||
signal_bus.home_overlay_trigger.emit()
|
||||
|
||||
def ac_sp(self):
|
||||
signal_bus.qa_stacked_page_switch.emit("w01_setting")
|
||||
signal_bus.stacked_page_switch.emit("w01_setting")
|
||||
signal_bus.stacked_page_switch_setting.emit()
|
||||
|
||||
def ac_lp(self):
|
||||
signal_bus.qa_stacked_page_switch.emit("w08_log")
|
||||
signal_bus.stacked_page_switch.emit("w08_log")
|
||||
signal_bus.stacked_page_switch_log.emit()
|
||||
|
||||
def ac_ap(self):
|
||||
signal_bus.qa_stacked_page_switch.emit("w09_about")
|
||||
signal_bus.stacked_page_switch.emit("w09_about")
|
||||
signal_bus.stacked_page_switch_about.emit()
|
||||
|
||||
def change2hide(self):
|
||||
self.ac_switch.setChecked(False)
|
||||
|
||||
Reference in New Issue
Block a user