提交一下,准备更换总线通信架构
This commit is contained in:
		@@ -1,25 +1,32 @@
 | 
			
		||||
import json
 | 
			
		||||
from math import lgamma
 | 
			
		||||
from shutil import copy
 | 
			
		||||
from random import choice
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
import sys
 | 
			
		||||
import requests
 | 
			
		||||
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QTabWidget, QListWidget, QStackedWidget, QCheckBox, QSpinBox, QToolBox, QLineEdit, QTableWidget, QTreeWidget, QCalendarWidget, QMessageBox, QToolBar, QSizePolicy, QMainWindow, QStatusBar
 | 
			
		||||
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QTabWidget, QListWidget, QStackedWidget, QCheckBox, QSpinBox, QToolBox, QLineEdit, QTableWidget, QTreeWidget, QCalendarWidget, QMessageBox, QToolBar, QSizePolicy, QMainWindow, QStatusBar, QListWidgetItem
 | 
			
		||||
from PySide6.QtCore import Qt, QTime, QSize, QRect,QEvent, QThread
 | 
			
		||||
from PySide6.QtGui import QCursor, QFont, QIcon, QImage, QPixmap, QShortcut, QAction, QKeySequence, QResizeEvent
 | 
			
		||||
from codes.common import clibs, db_operation
 | 
			
		||||
from codes.ui.widget_bg_ui import WidgetWithBg
 | 
			
		||||
from codes.common.worker import Worker
 | 
			
		||||
from typing import Callable, Any
 | 
			
		||||
from codes.common.exception_handler import handle_exception
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MainWindow(QMainWindow):
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self.predos()
 | 
			
		||||
        self.init_ui()
 | 
			
		||||
        self.setup_slot()
 | 
			
		||||
        self.predos()
 | 
			
		||||
        self.setup_sc()
 | 
			
		||||
 | 
			
		||||
    def predos(self):
 | 
			
		||||
        self.m = Path(__file__).stem
 | 
			
		||||
        self.home_overlay = None
 | 
			
		||||
        db_operation.db_backup()
 | 
			
		||||
        clibs.conn, clibs.cursor = db_operation.db_conn()
 | 
			
		||||
 | 
			
		||||
    def init_ui(self):
 | 
			
		||||
        self.setMinimumSize(clibs.win_width, clibs.win_height)
 | 
			
		||||
@@ -34,25 +41,110 @@ class MainWindow(QMainWindow):
 | 
			
		||||
        self.centralW = QWidget()
 | 
			
		||||
        self.setCentralWidget(self.centralW)
 | 
			
		||||
        self.statusBar = QStatusBar()
 | 
			
		||||
        self.statusBar.setStyleSheet("""
 | 
			
		||||
            QStatusBar {
 | 
			
		||||
                background: #8B8989;   /* 背景色 */
 | 
			
		||||
                color: #000000;        /* 文字色 */
 | 
			
		||||
                border: none;
 | 
			
		||||
                font: 14px "Consolas";
 | 
			
		||||
            }
 | 
			
		||||
        """)
 | 
			
		||||
        self.setStatusBar(self.statusBar)
 | 
			
		||||
 | 
			
		||||
        # toolbar
 | 
			
		||||
        # homepage
 | 
			
		||||
        self.ac_homepage = QAction()
 | 
			
		||||
        self.ac_homepage.setMenuRole(QAction.MenuRole.NoRole)
 | 
			
		||||
        self.ac_homepage.setStatusTip("Go to homepage")
 | 
			
		||||
        self.ac_homepage.setStatusTip("Go to home page")
 | 
			
		||||
        self.ac_homepage.setToolTip("Ctrl+Alt+H")
 | 
			
		||||
        self.ac_homepage.setText("主页")
 | 
			
		||||
        self.ac_homepage.setShortcut(QKeySequence("Ctrl+Alt+H"))
 | 
			
		||||
        self.toolBar.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.ac_setting.setShortcut(QKeySequence("Ctrl+Alt+S"))
 | 
			
		||||
        self.toolBar.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.ac_log.setShortcut(QKeySequence("Ctrl+Alt+L"))
 | 
			
		||||
        self.toolBar.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.ac_about.setShortcut(QKeySequence("Ctrl+Alt+A"))
 | 
			
		||||
        self.toolBar.addAction(self.ac_about)
 | 
			
		||||
 | 
			
		||||
        layout_h = QHBoxLayout()
 | 
			
		||||
        # list widget
 | 
			
		||||
        self.listW = QListWidget()
 | 
			
		||||
        for item in clibs.listW_items:
 | 
			
		||||
            _ = QListWidgetItem(item)
 | 
			
		||||
            _.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
 | 
			
		||||
            self.listW.addItem(_)
 | 
			
		||||
 | 
			
		||||
        layout_h.addWidget(self.listW)
 | 
			
		||||
 | 
			
		||||
        # stacked widget  1x: 10为一级按钮页,其余为二级按钮页,2-9同理 | 0x. 日志/设置/关于等页面
 | 
			
		||||
        self.stackedW =QStackedWidget()
 | 
			
		||||
        self.w00_setting = QWidget()
 | 
			
		||||
        self.stackedW.addWidget(self.w00_setting)
 | 
			
		||||
        self.lb_test00 = QLabel("testing text on setting widget", parent=self.w00_setting)
 | 
			
		||||
 | 
			
		||||
        self.w08_log = QWidget()
 | 
			
		||||
        self.stackedW.addWidget(self.w08_log)
 | 
			
		||||
        self.lb_test08 = QLabel("testing text on log widget", parent=self.w08_log)
 | 
			
		||||
 | 
			
		||||
        self.w09_about = QWidget()
 | 
			
		||||
        self.stackedW.addWidget(self.w09_about)
 | 
			
		||||
        self.lb_test09 = QLabel("testing text on about widget", parent=self.w09_about)
 | 
			
		||||
 | 
			
		||||
        self.w10_practical = QWidget()
 | 
			
		||||
        self.stackedW.addWidget(self.w10_practical)
 | 
			
		||||
        self.lb_test10 = QLabel("testing text on practical widget", parent=self.w10_practical)
 | 
			
		||||
 | 
			
		||||
        self.w20_efficiency = QWidget()
 | 
			
		||||
        self.stackedW.addWidget(self.w20_efficiency)
 | 
			
		||||
        self.lb_test20 = QLabel("testing text on efficiency widget", parent=self.w20_efficiency)
 | 
			
		||||
 | 
			
		||||
        self.w30_financial = QWidget()
 | 
			
		||||
        self.stackedW.addWidget(self.w30_financial)
 | 
			
		||||
        self.lb_test30 = QLabel("testing text on financial widget", parent=self.w30_financial)
 | 
			
		||||
 | 
			
		||||
        layout_h.addWidget(self.stackedW)
 | 
			
		||||
        layout_h.setStretch(0, 1)
 | 
			
		||||
        layout_h.setStretch(1, 5)
 | 
			
		||||
        self.centralW.setLayout(layout_h)
 | 
			
		||||
 | 
			
		||||
    def setup_slot(self):
 | 
			
		||||
        self.ac_homepage.triggered.connect(self.ac_hp)
 | 
			
		||||
        # QShortcut("Esc", self).activated.connect(self.close)
 | 
			
		||||
        self.ac_setting.triggered.connect(self.ac_sp)
 | 
			
		||||
        self.ac_log.triggered.connect(self.ac_lp)
 | 
			
		||||
        self.ac_about.triggered.connect(self.ac_ap)
 | 
			
		||||
        self.f11_sc = QShortcut(QKeySequence("F11"), self)
 | 
			
		||||
        self.f11_sc.activated.connect(self.sc_F11)
 | 
			
		||||
        # self.listW.currentItemChanged.connect(self.change_stackedW)
 | 
			
		||||
        self.listW.itemClicked.connect(self.change_stackedW)
 | 
			
		||||
 | 
			
		||||
    def predos(self):
 | 
			
		||||
        self.home_overlay = None
 | 
			
		||||
        db_operation.db_backup()
 | 
			
		||||
        self.conn, self.cursor = db_operation.db_conn()
 | 
			
		||||
    def setup_sc(self, stat: bool = True):
 | 
			
		||||
        if stat:
 | 
			
		||||
            self.ac_homepage.setShortcut(QKeySequence("Ctrl+Alt+H"))
 | 
			
		||||
            self.f11_sc.setEnabled(True)
 | 
			
		||||
        else:
 | 
			
		||||
            self.ac_homepage.setShortcut(QKeySequence())
 | 
			
		||||
            self.f11_sc.setEnabled(False)
 | 
			
		||||
 | 
			
		||||
    def ac_hp(self):
 | 
			
		||||
        def get_files(dir_path):
 | 
			
		||||
@@ -104,6 +196,7 @@ class MainWindow(QMainWindow):
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                pass
 | 
			
		||||
 | 
			
		||||
        @handle_exception(self.m)
 | 
			
		||||
        def change_resources():
 | 
			
		||||
            # avatar
 | 
			
		||||
            src, _ = get_files(f"{clibs.base_path}/assets/media/avatar")
 | 
			
		||||
@@ -123,10 +216,10 @@ class MainWindow(QMainWindow):
 | 
			
		||||
            copy(src, dst)
 | 
			
		||||
 | 
			
		||||
        def gen_page():
 | 
			
		||||
            self.set_shortcuts(False)
 | 
			
		||||
            self.setup_sc(False)
 | 
			
		||||
            self.home_overlay = WidgetWithBg(parent=self)
 | 
			
		||||
            self.home_overlay.on_closed.connect(self.exit_overlay)
 | 
			
		||||
            self.home_overlay.on_full_screen.connect(self.full_screen)
 | 
			
		||||
            self.home_overlay.on_full_screen.connect(self.toggle_full_screen)
 | 
			
		||||
            self.home_overlay.show()
 | 
			
		||||
            width, height = self.width(), self.height()
 | 
			
		||||
            if width > clibs.win_width:
 | 
			
		||||
@@ -138,42 +231,39 @@ class MainWindow(QMainWindow):
 | 
			
		||||
        self.launch_get_resources(get_resources)
 | 
			
		||||
        gen_page()
 | 
			
		||||
 | 
			
		||||
    def full_screen(self, flag: bool):
 | 
			
		||||
        if flag == 0:
 | 
			
		||||
            if self.isFullScreen():
 | 
			
		||||
                self.setWindowFlags(self.windowFlags() ^ Qt.WindowType.WindowStaysOnTopHint)
 | 
			
		||||
                self.show()
 | 
			
		||||
                self.showMaximized()
 | 
			
		||||
            else:
 | 
			
		||||
                self.setWindowFlags(Qt.WindowType.WindowStaysOnTopHint)
 | 
			
		||||
                self.showFullScreen()
 | 
			
		||||
        elif flag == 1:
 | 
			
		||||
    def ac_sp(self):
 | 
			
		||||
        self.stackedW.setCurrentWidget(self.w00_setting)
 | 
			
		||||
 | 
			
		||||
    def ac_lp(self):
 | 
			
		||||
        self.stackedW.setCurrentWidget(self.w08_log)
 | 
			
		||||
 | 
			
		||||
    def ac_ap(self):
 | 
			
		||||
        self.stackedW.setCurrentWidget(self.w09_about)
 | 
			
		||||
 | 
			
		||||
    def toggle_full_screen(self):
 | 
			
		||||
        if self.isFullScreen():
 | 
			
		||||
            self.setWindowFlags(self.windowFlags() ^ Qt.WindowType.WindowStaysOnTopHint)
 | 
			
		||||
            self.show()
 | 
			
		||||
            self.showMaximized()
 | 
			
		||||
        else:
 | 
			
		||||
            self.setWindowFlags(Qt.WindowType.WindowStaysOnTopHint)
 | 
			
		||||
            self.showFullScreen()
 | 
			
		||||
 | 
			
		||||
    def exit_overlay(self):
 | 
			
		||||
        self.set_shortcuts(True)
 | 
			
		||||
        self.setup_sc(True)
 | 
			
		||||
        self.home_overlay = None
 | 
			
		||||
        if self.isFullScreen():
 | 
			
		||||
            self.setWindowFlags(self.windowFlags() ^ Qt.WindowType.WindowStaysOnTopHint)
 | 
			
		||||
            self.show()
 | 
			
		||||
            self.showMaximized()
 | 
			
		||||
 | 
			
		||||
    def set_shortcuts(self, stat: bool = True):
 | 
			
		||||
        if stat:
 | 
			
		||||
            self.ac_homepage.setShortcut(QKeySequence("Ctrl+Alt+H"))
 | 
			
		||||
            # self.ac_settings.setShortcut(QKeySequence("Ctrl+Alt+S"))
 | 
			
		||||
            # self.ac_logs.setShortcut(QKeySequence("Ctrl+Alt+L"))
 | 
			
		||||
            # self.ac_about.setShortcut(QKeySequence("Ctrl+Alt+A"))
 | 
			
		||||
            # self.ac_caging.setShortcut(QKeySequence("Ctrl+Alt+C"))
 | 
			
		||||
            # self.ac_quit.setShortcut(QKeySequence("Ctrl+Alt+Q"))
 | 
			
		||||
        else:
 | 
			
		||||
            self.ac_homepage.setShortcut(QKeySequence())
 | 
			
		||||
            # self.ac_settings.setShortcut(QKeySequence())
 | 
			
		||||
            # self.ac_logs.setShortcut(QKeySequence())
 | 
			
		||||
            # self.ac_about.setShortcut(QKeySequence())
 | 
			
		||||
            # self.ac_caging.setShortcut(QKeySequence())
 | 
			
		||||
            # self.ac_quit.setShortcut(QKeySequence())
 | 
			
		||||
    def change_stackedW(self, w_item):
 | 
			
		||||
        if w_item.text() == "实用工具":
 | 
			
		||||
            self.stackedW.setCurrentWidget(self.w10_practical)
 | 
			
		||||
        elif w_item.text() == "效率提升":
 | 
			
		||||
            self.stackedW.setCurrentWidget(self.w20_efficiency)
 | 
			
		||||
        elif w_item.text() == "财务分析":
 | 
			
		||||
            self.stackedW.setCurrentWidget(self.w30_financial)
 | 
			
		||||
 | 
			
		||||
    def launch_get_resources(self, func, on_anything: Callable[..., Any] = None, *args, **kwargs):
 | 
			
		||||
        self.td_get_resources = Worker(func, *args, **kwargs)
 | 
			
		||||
@@ -183,6 +273,11 @@ class MainWindow(QMainWindow):
 | 
			
		||||
        self.td_get_resources.finished.connect(lambda: None)
 | 
			
		||||
        self.td_get_resources.start()
 | 
			
		||||
 | 
			
		||||
    def sc_F11(self):
 | 
			
		||||
        if not self.home_overlay:
 | 
			
		||||
            self.ac_hp()
 | 
			
		||||
            self.toggle_full_screen()
 | 
			
		||||
 | 
			
		||||
    def resizeEvent(self, event: QResizeEvent):
 | 
			
		||||
        super().resizeEvent(event)
 | 
			
		||||
        if self.home_overlay:
 | 
			
		||||
@@ -192,10 +287,9 @@ class MainWindow(QMainWindow):
 | 
			
		||||
        if self.isFullScreen():
 | 
			
		||||
            event.ignore()
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        reply = QMessageBox.question(self, "退出", "\n程序可能在运行,确定要退出吗?")
 | 
			
		||||
        if reply == QMessageBox.StandardButton.Yes:
 | 
			
		||||
            db_operation.db_close(self.conn, self.cursor)
 | 
			
		||||
            db_operation.db_close()
 | 
			
		||||
            event.accept()
 | 
			
		||||
        else:
 | 
			
		||||
            event.ignore()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user