This commit is contained in:
2025-10-10 17:16:08 +08:00
parent ed947743fc
commit 062b1e24e9
281 changed files with 536 additions and 109 deletions

View File

@@ -4,26 +4,32 @@ from PySide6.QtCore import Qt
from codes.common import clibs
from codes.common.signal_bus import signal_bus
from codes.common.qss_reloader import qss_reloader
class SListWidget(QListWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.predos()
self.pre_do()
self.init_ui()
self.setup_slot()
self.post_do()
def predos(self):
def pre_do(self):
...
def init_ui(self):
self.setObjectName("SListWidget")
self.setMinimumWidth(150)
for item in clibs.listW_items:
_ = QListWidgetItem(item)
_.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.addItem(_)
def post_do(self):
qss_reloader.register(clibs.qss_list_widget, self)
self.setup_slot()
def setup_slot(self):
self.itemClicked.connect(self.item_clicked)
signal_bus.stacked_page_switch_setting.connect(self.qa_hide)

View File

@@ -21,6 +21,7 @@ class SStackedWidget(QStackedWidget):
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):
self.setObjectName("SStackedWidget")
# stacked widget 1x: 10为一级按钮页其余为二级按钮页2-9同理 | 0x. 日志/设置/关于等页面
for page_id, widget in self.page_list.items():
widget.setObjectName(page_id)

View File

@@ -0,0 +1,25 @@
from PySide6.QtWidgets import QStatusBar
from PySide6.QtGui import QAction, QIcon
from PySide6.QtCore import QSize
from codes.common import clibs
from codes.common.signal_bus import signal_bus
from codes.common.qss_reloader import qss_reloader
class SStatusBar(QStatusBar):
def __init__(self, parent=None):
super().__init__(parent)
self.pre_do()
self.init_ui()
self.post_do()
def pre_do(self):
...
def init_ui(self):
self.setObjectName("SStatusBar")
...
def post_do(self):
qss_reloader.register(clibs.qss_statusbar, self)

View File

@@ -4,47 +4,34 @@ from PySide6.QtCore import QSize
from codes.common import clibs
from codes.common.signal_bus import signal_bus
from codes.common.qss_reloader import qss_reloader
class SToolBar(QToolBar):
def __init__(self, parent=None):
super().__init__(parent)
self.predos()
self.pre_do()
self.init_ui()
self.setup_slot()
self.post_do()
def predos(self):
def pre_do(self):
...
def init_ui(self):
self.setObjectName("SToolBar")
# 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.on_icon = QIcon(clibs.on_icon) # 开状态图标
self.off_icon = QIcon(clibs.off_icon) # 关状态图标
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.setCheckable(True)
self.ac_switch.setChecked(True)
self.ac_switch.setObjectName("acSwitch")
self.setIconSize(QSize(30, 30)) # ← 一行决定图标像素
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;
}
""")
btn.setObjectName("ac_switch")
# homepage
self.ac_homepage = QAction()
@@ -78,6 +65,10 @@ class SToolBar(QToolBar):
self.ac_about.setText("关于")
self.addAction(self.ac_about)
def post_do(self):
qss_reloader.register(clibs.qss_toolbar, self)
self.setup_slot()
def setup_slot(self):
self.ac_switch.toggled.connect(self.ac_sw)
self.ac_homepage.triggered.connect(self.ac_hp)

View File

@@ -11,59 +11,70 @@ from codes.common.exception_handler import handle_exception
class LoginWindow(QWidget):
def __init__(self):
super().__init__()
self.predos()
self.pre_do()
self.init_ui()
self.setup_slot()
self.post_do()
def predos(self):
def pre_do(self):
db_operation.db_init()
db_operation.db_conn()
def init_ui(self):
self.setObjectName("LoginWindow")
self.setMinimumSize(420, 200)
self.setMaximumSize(500, 240)
self.resize(480, 200)
self.setWindowTitle("登录")
self.setWindowIcon(QIcon(f"{clibs.base_path}/assets/media/icon.ico"))
self.setWindowIcon(QIcon(clibs.icon))
self.setFont(QFont("Consolas", 14))
self.layout_outer = QHBoxLayout()
self.lb_logo = QLabel()
self.lb_logo.setObjectName("lb_logo")
self.lb_logo.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.lb_logo.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
self.lb_logo.setPixmap(QPixmap(f"{clibs.base_path}/assets/media/logo.png"))
self.lb_logo.setPixmap(QPixmap(clibs.logo))
self.lb_logo.setFixedSize(QSize(120, 120))
self.lb_logo.setScaledContents(True)
self.layout_outer.addWidget(self.lb_logo)
self.tabW_login = QTabWidget()
self.tabW_login.setObjectName("tabW_login")
self.tab_login = QWidget()
self.tab_login.setObjectName("tab_login")
self.tabW_login.addTab(self.tab_login, "登录")
self.tab_register = QWidget()
self.tab_register.setObjectName("tab_register")
self.tabW_login.addTab(self.tab_register, "注册")
self.layout_outer.addWidget(self.tabW_login)
# 登陆页面
self.layout_H_username = QHBoxLayout()
self.lb_username = QLabel("账号")
self.lb_username.setObjectName("lb_username")
self.lb_username.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.layout_H_username.addWidget(self.lb_username)
self.le_username = QLineEdit()
self.le_username.setObjectName("le_username")
self.le_username.setFocus()
self.layout_H_username.addWidget(self.le_username)
self.layout_H_password = QHBoxLayout()
self.lb_password = QLabel("密码")
self.lb_password.setObjectName("lb_password")
self.lb_password.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.layout_H_password.addWidget(self.lb_password)
self.le_password = QLineEdit()
self.le_password.setObjectName("le_password")
self.le_password.setEchoMode(QLineEdit.EchoMode.Password)
self.layout_H_password.addWidget(self.le_password)
self.layout_H_button = QHBoxLayout()
self.btn_login = QPushButton("登录")
self.btn_login.setObjectName("btn_login")
self.btn_login.setAutoDefault(True)
self.btn_cancel = QPushButton("取消")
self.btn_cancel.setObjectName("btn_cancel")
self.btn_cancel.setAutoDefault(True)
self.layout_H_button.addWidget(self.btn_login)
self.layout_H_button.addWidget(self.btn_cancel)
@@ -77,32 +88,40 @@ class LoginWindow(QWidget):
# 注册页面
self.layout_H_username_reg = QHBoxLayout()
self.lb_username_reg = QLabel("账号设定")
self.lb_username_reg.setObjectName("lb_username_reg")
self.lb_username_reg.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.layout_H_username_reg.addWidget(self.lb_username_reg)
self.le_username_reg = QLineEdit()
self.le_username_reg.setObjectName("le_username_reg")
self.le_username_reg.setFocus()
self.layout_H_username_reg.addWidget(self.le_username_reg)
self.layout_H_password_reg = QHBoxLayout()
self.lb_password_reg = QLabel("密码设定")
self.lb_password_reg.setObjectName("lb_password_reg")
self.lb_password_reg.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.layout_H_password_reg.addWidget(self.lb_password_reg)
self.le_password_reg = QLineEdit()
self.le_password_reg.setObjectName("le_password_reg")
self.le_password_reg.setEchoMode(QLineEdit.EchoMode.Password)
self.layout_H_password_reg.addWidget(self.le_password_reg)
self.layout_H_password_reg_confirm = QHBoxLayout()
self.lb_password_reg_confirm = QLabel("密码确认")
self.lb_password_reg_confirm.setObjectName("lb_password_reg_confirm")
self.lb_password_reg_confirm.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.layout_H_password_reg_confirm.addWidget(self.lb_password_reg_confirm)
self.le_password_reg_confirm = QLineEdit()
self.le_password_reg.setObjectName("le_password_reg")
self.le_password_reg_confirm.setEchoMode(QLineEdit.EchoMode.Password)
self.layout_H_password_reg_confirm.addWidget(self.le_password_reg_confirm)
self.layout_H_button_reg = QHBoxLayout()
self.btn_login_reg = QPushButton("确认")
self.btn_login_reg.setObjectName("btn_login_reg")
self.btn_login_reg.setAutoDefault(True)
self.btn_cancel_reg = QPushButton("取消")
self.btn_cancel_reg.setObjectName("btn_cancel_reg")
self.btn_cancel_reg.setAutoDefault(True)
self.layout_H_button_reg.addWidget(self.btn_login_reg)
self.layout_H_button_reg.addWidget(self.btn_cancel_reg)
@@ -117,6 +136,9 @@ class LoginWindow(QWidget):
self.setLayout(self.layout_outer)
self.le_username.setFocus()
def post_do(self):
self.setup_slot()
def setup_slot(self):
self.tabW_login.currentChanged.connect(self.onChange_tabW)
self.btn_login.clicked.connect(self.login_check)

View File

@@ -6,13 +6,14 @@ import json
import sys
from PySide6.QtWidgets import QApplication, QWidget, QHBoxLayout, QMessageBox, QMainWindow, QStatusBar
from PySide6.QtGui import QFont, QIcon, QResizeEvent, QShortcut, QKeySequence, QAction
from PySide6.QtCore import Qt
from PySide6.QtGui import QIcon, QResizeEvent, QShortcut, QKeySequence, QAction
from PySide6.QtCore import Qt, QFileSystemWatcher
from codes.common import clibs, db_operation
from codes.ui.components.toolbar_ui import SToolBar
from codes.ui.components.list_widget_ui import SListWidget
from codes.ui.components.stacked_widget_ui import SStackedWidget
from codes.ui.components.statusbar_ui import SStatusBar
from codes.common.signal_bus import signal_bus
from codes.common.worker import Worker
from codes.common.exception_handler import handle_exception
@@ -22,38 +23,29 @@ from codes.ui.overlay_page.overlay_ui import WidgetWithBg
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.predos()
self.pre_do()
self.init_ui()
self.setup_slot()
self.setup_sc()
self.post_do()
def predos(self):
def pre_do(self):
self.m = Path(__file__).stem
self.home_overlay = None
db_operation.db_backup()
db_operation.db_conn()
def init_ui(self):
self.setObjectName("MainWindow")
self.setMinimumSize(clibs.win_width, clibs.win_height)
self.resize(clibs.win_width, clibs.win_height)
self.setWindowTitle("Toolbox")
self.setWindowIcon(QIcon(f"{clibs.base_path}/assets/media/icon.ico"))
self.setFont(QFont("Consolas", 14))
# 任务栏/主窗口/状态栏
self.toolBar = SToolBar()
self.addToolBar(self.toolBar)
self.toolBar.setMovable(False)
self.centralW = QWidget()
self.setCentralWidget(self.centralW)
self.statusBar = QStatusBar()
self.statusBar.setStyleSheet("""
QStatusBar {
background: #8B8989; /* 背景色 */
color: #000000; /* 文字色 */
border: none;
font: 14px "Consolas";
}
""")
self.statusBar = SStatusBar()
self.setStatusBar(self.statusBar)
layout_h = QHBoxLayout()
@@ -69,6 +61,10 @@ class MainWindow(QMainWindow):
signal_bus.home_overlay_close.connect(self.exit_overlay)
self.install_sc()
def post_do(self):
self.setup_slot()
self.setup_sc()
def setup_sc(self, enable: bool = True):
for sc_id, obj in self.sc_pool.items():
if isinstance(obj, QAction):
@@ -134,7 +130,7 @@ class MainWindow(QMainWindow):
for file in files:
image_names.append(file.name.removesuffix(".jpg"))
for image in res["images"]:
image_name = "-".join([image["startdate"], image["title"]])
image_name = "-".join([image["startdate"], image["hsh"]])
if image_name in image_names:
continue
else:
@@ -149,7 +145,6 @@ class MainWindow(QMainWindow):
proverbs = []
proverb_file = Path(f"{clibs.base_path}/assets/media/hitokoto.json")
req = requests.get(hitokoto)
print(f"req.text = {req.text}")
if not proverb_file.exists():
proverb_file.touch()
proverb_file.write_text("[]")

View File

@@ -7,6 +7,7 @@ from zhdate import ZhDate
from codes.common import clibs
from codes.common.signal_bus import signal_bus
from codes.common.qss_reloader import qss_reloader
class LunarClockLabel(QLabel):
@@ -35,7 +36,7 @@ class LunarClockLabel(QLabel):
g = dt.date()
z = ZhDate.today()
week = "一二三四五六日"[g.dayOfWeek() - 1]
text = f"{dt.toString('hh:mm:ss')}"
text = f"{dt.toString('hh:mm')}"
self.setText(text)
@@ -50,25 +51,28 @@ class DoubleClickLabel(QLabel):
class WidgetWithBg(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.predos()
self.pre_do()
self.init_ui()
self.setup_slot()
self.post_do()
def predos(self):
def pre_do(self):
font_id = QFontDatabase.addApplicationFont(f"{clibs.base_path}/assets/media/font/OldEnglishTextMT/OldEnglishTextMT.ttf")
family = QFontDatabase.applicationFontFamilies(font_id)[0]
self.lb_font = QFont(family, 28, QFont.Weight.Medium)
self.lb_font = QFont(family, 32, QFont.Weight.Medium)
self.background_pixmap = QPixmap(clibs.bg)
def init_ui(self):
self.setObjectName("WidgetWithBg")
layout_v = QVBoxLayout()
# 最上层的空白区
self.lb_empty_up = QLabel(self)
self.lb_empty_up.setObjectName("lb_empty_up")
layout_v.addWidget(self.lb_empty_up)
# 头像区
layout_h_1 = QHBoxLayout()
layout_h_1.addStretch(1)
self.lb_avatar = DoubleClickLabel(self)
self.lb_avatar.setObjectName("lb_avatar")
self.lb_avatar.setAlignment(Qt.AlignmentFlag.AlignCenter)
avatar = QPixmap(clibs.avatar)
avatar = self.circle_pixmap(avatar, 200)
@@ -77,54 +81,41 @@ class WidgetWithBg(QWidget):
self.lb_avatar.setFixedSize(144, 144)
layout_h_1.addWidget(self.lb_avatar)
self.lb_time = LunarClockLabel(self, flag=1)
self.lb_time.setObjectName("lb_time")
self.lb_time.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.lb_time.setStyleSheet("color: rgba(255,255,255,255);")
self.lb_time.setFont(QFont("Arial Black", 56, QFont.Weight.Bold))
layout_h_1.addWidget(self.lb_time)
layout_h_1.addStretch(1)
layout_v.addLayout(layout_h_1)
# layout_v.addWidget(self.lb_avatar, alignment=Qt.AlignmentFlag.AlignCenter)
# 艺术字区
self.lb_name = QLabel(self)
self.lb_name.setObjectName("lb_name")
self.lb_name.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.lb_name.setText("Manford Fan · Code Create Life")
self.lb_name.setStyleSheet("color: rgba(255,255,255,255);")
self.lb_name.setFont(self.lb_font)
layout_v.addWidget(self.lb_name)
# 时间区-左横线
layout_h = QHBoxLayout()
self.line_left = QFrame(self)
self.line_left.setObjectName("line_left")
self.line_left.setFrameShape(QFrame.Shape.HLine)
self.line_left.setFrameShadow(QFrame.Shadow.Plain)
self.line_left.setStyleSheet("""
QFrame {
border: none;
background-color: rgba(255, 255, 255, 40);
}
""")
policy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
self.line_left.setSizePolicy(policy)
self.line_left.setLineWidth(1)
self.line_left.setFixedWidth(100)
# 时间区-右横线
self.line_right = QFrame(self)
self.line_right.setObjectName("line_right")
self.line_right.setFrameShape(QFrame.Shape.HLine)
self.line_right.setFrameShadow(QFrame.Shadow.Plain)
self.line_right.setStyleSheet("""
QFrame {
border: none;
background-color: rgba(255, 255, 255, 40);
}
""")
policy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
self.line_right.setSizePolicy(policy)
self.line_right.setLineWidth(1)
self.line_right.setFixedWidth(100)
# 时间区-时间
self.lb_date = LunarClockLabel(self)
self.lb_date.setObjectName("lb_date")
self.lb_date.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.lb_date.setStyleSheet("color: rgba(255,255,255,255);")
self.lb_date.setFont(QFont("Consolas", 12, QFont.Weight.Bold))
layout_h.addStretch(1)
layout_h.addWidget(self.line_left)
layout_h.addWidget(self.lb_date)
@@ -133,21 +124,22 @@ class WidgetWithBg(QWidget):
layout_v.addLayout(layout_h)
self.lb_proverb = QLabel(self)
self.lb_proverb.setObjectName("lb_proverb")
self.lb_proverb.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.lb_proverb.setText(clibs.proverb)
self.lb_proverb.setStyleSheet("color: rgba(255,255,255,255);")
self.lb_proverb.setFont(QFont("Consolas", 14, QFont.Weight.Bold))
layout_v.addWidget(self.lb_proverb)
self.le_password = QLineEdit(self)
self.le_password.setObjectName("le_password")
self.le_password.setEchoMode(QLineEdit.EchoMode.Password)
self.le_password.setFont(QFont("Consolas", 12, QFont.Weight.Normal))
# self.le_password.setFont(QFont("Consolas", 12, QFont.Weight.Normal))
self.le_password.setMinimumWidth(300)
self.le_password.setFixedHeight(30)
layout_v.addWidget(self.le_password, alignment=Qt.AlignmentFlag.AlignCenter)
self.hide_le_password()
self.lb_empty_down = QLabel(self)
self.lb_empty_down.setObjectName("lb_empty_down")
layout_v.addWidget(self.lb_empty_down)
layout_v.setStretch(0, 2) # empty up
@@ -159,6 +151,10 @@ class WidgetWithBg(QWidget):
layout_v.setStretch(6, 2) # empty down
self.setLayout(layout_v)
def post_do(self):
qss_reloader.register(clibs.qss_home_overlay, self)
self.setup_slot()
def setup_slot(self):
self.lb_avatar.doubleClicked.connect(self.toggle_auth_show)
self.le_password.returnPressed.connect(self.validate_password)

View File

@@ -1,5 +1,7 @@
from PySide6.QtWidgets import QWidget, QLabel
from codes.common import clibs
class W01Setting(QWidget):
def __init__(self, parent=None):
@@ -15,6 +17,7 @@ class W01Setting(QWidget):
def ui_init(self):
self.lb_test = QLabel(f"testing text on widget: \n{__file__}", parent=self)
self.lb_test.setObjectName("lb_test")
def setup_slot(self):
...

View File

@@ -1,10 +1,11 @@
from PySide6.QtWidgets import QWidget, QLabel, QMessageBox, QVBoxLayout, QTreeWidget, QHeaderView, QHBoxLayout, QPushButton, QFrame, QLineEdit, QCheckBox, QTreeWidgetItem, QDialog, QPlainTextEdit, QApplication
from PySide6.QtCore import Qt, Signal
from PySide6.QtGui import QColor, QIcon, QFont, QKeySequence, QIntValidator, QShortcut
from PySide6.QtCore import Qt, Signal, QSize
from PySide6.QtGui import QColor, QIcon, QKeySequence, QIntValidator, QShortcut
from codes.common.signal_bus import signal_bus
from codes.common import db_operation
from codes.common import clibs
from codes.common.qss_reloader import qss_reloader
class LogDialog(QDialog):
@@ -52,7 +53,6 @@ class PageNumberInput(QDialog):
self.le_page_number = QLineEdit(self)
self.le_page_number.setText("1")
self.le_page_number.selectAll()
self.le_page_number.setFont(QFont('Consolas', 14))
self.le_page_number.setValidator(QIntValidator(0, 9999999, self))
layout_h.addWidget(self.le_page_number, stretch=4)
layout_h.addStretch(1)
@@ -75,71 +75,89 @@ class ClickableLabel(QLabel):
class W08Log(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.predos()
self.pre_do()
self.ui_init()
self.setup_slot()
self.setup_sc()
self.post_do()
def predos(self):
def pre_do(self):
self.records, self.len_records = "", ""
self.is_searching = False
self.max_item_number = clibs.config["log_number_per_page"]
def ui_init(self):
self.setObjectName("W08Log")
layout_v = QVBoxLayout(self)
self.treeW = QTreeWidget()
self.treeW.setUniformRowHeights(True)
self.treeW.setObjectName("treeW")
self.treeW.setHeaderLabels(["ID", "时间戳", "告警级别", "模块信息", "告警内容"])
header = self.treeW.header()
self.treeW.headerItem().setTextAlignment(0, Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter)
self.header = self.treeW.header()
self.header.setObjectName("header")
for i in range(self.treeW.columnCount()):
header.setSectionResizeMode(i, QHeaderView.ResizeMode.ResizeToContents)
self.header.setSectionResizeMode(i, QHeaderView.ResizeMode.ResizeToContents)
layout_v.addWidget(self.treeW, stretch=9)
layout_h = QHBoxLayout()
self.pb_previous = QPushButton("上一页")
self.pb_previous.setObjectName("pb_previous")
layout_h.addWidget(self.pb_previous, stretch=1)
self.lb_page = ClickableLabel("999999/999999")
self.lb_page.setObjectName("lb_page")
self.lb_page.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.lb_page.setMinimumWidth(144)
layout_h.addWidget(self.lb_page, stretch=2)
self.pb_next = QPushButton("下一页")
self.pb_next.setObjectName("pb_next")
layout_h.addWidget(self.pb_next, stretch=1)
layout_h.addStretch(9)
self.frame_checkbox = QFrame()
self.frame_checkbox.setObjectName("frame_checkbox")
layout_h_checkbox = QHBoxLayout()
self.box_info = QCheckBox("通知", parent=self.frame_checkbox)
self.box_info.setObjectName("box_info")
self.box_info.setChecked(True)
layout_h_checkbox.addWidget(self.box_info, stretch=1)
self.box_warning = QCheckBox("告警", parent=self.frame_checkbox)
self.box_warning.setObjectName("box_warning")
self.box_warning.setChecked(True)
layout_h_checkbox.addWidget(self.box_warning, stretch=1)
self.box_error = QCheckBox("错误", parent=self.frame_checkbox)
self.box_error.setObjectName("box_error")
self.box_error.setChecked(True)
layout_h_checkbox.addWidget(self.box_error, stretch=1)
self.box_exception = QCheckBox("异常", parent=self.frame_checkbox)
self.box_exception.setObjectName("box_exception")
self.box_exception.setChecked(True)
layout_h_checkbox.addWidget(self.box_exception, stretch=1)
self.box_unknown = QCheckBox("未知", parent=self.frame_checkbox)
self.box_unknown.setObjectName("box_unknown")
self.box_unknown.setChecked(True)
layout_h_checkbox.addWidget(self.box_unknown, stretch=1)
layout_h.addLayout(layout_h_checkbox, stretch=4)
self.le_search = QLineEdit()
self.le_search.setObjectName("le_search")
self.le_search.setPlaceholderText("告警内容")
self.le_search.setMinimumWidth(300)
layout_h.addWidget(self.le_search, stretch=5)
self.pb_search = QPushButton("查找")
self.pb_search.setObjectName("pb_search")
layout_h.addWidget(self.pb_search, stretch=1)
layout_v.addLayout(layout_h, stretch=1)
self.setLayout(layout_v)
def post_do(self):
qss_reloader.register(clibs.qss_w08_log, self)
self.setup_slot()
self.setup_sc()
def setup_slot(self):
self.treeW.itemDoubleClicked.connect(self.show_single_log)
self.pb_previous.clicked.connect(self.previous_page)
@@ -154,14 +172,14 @@ class W08Log(QWidget):
def previous_page(self):
if not self.is_searching:
self.records, self.len_records = db_operation.db_query_logs(True)
self.records, self.len_records = db_operation.db_query_logs(None)
current, total = self.lb_page.text().split("/")
page_number = int(current) - 1
self.show_page(self.records, self.len_records, page_number=page_number)
def next_page(self):
if not self.is_searching:
self.records, self.len_records = db_operation.db_query_logs(True)
self.records, self.len_records = db_operation.db_query_logs(None)
current, total = self.lb_page.text().split("/")
page_number = int(current) + 1
self.show_page(self.records, self.len_records, page_number=page_number)
@@ -180,7 +198,7 @@ class W08Log(QWidget):
QMessageBox().warning(None, "警告", "至少选择一个过滤器!")
return
self.records, self.len_records = db_operation.db_query_logs(levels=levels)
self.records, self.len_records = db_operation.db_query_logs(levels)
if search_text:
self.records, self.len_records = db_operation.db_query_logs(search_text, self.records)
@@ -194,11 +212,11 @@ class W08Log(QWidget):
page_number = dlg.get_page_number()
if not self.is_searching:
self.records, self.len_records = db_operation.db_query_logs(True)
self.records, self.len_records = db_operation.db_query_logs(None)
self.show_page(self.records, self.len_records, page_number=page_number)
def show_latest_page(self):
self.records, self.len_records = db_operation.db_query_logs(True)
self.records, self.len_records = db_operation.db_query_logs(None)
self.is_searching = False
self.box_info.setChecked(True)
self.box_warning.setChecked(True)
@@ -237,15 +255,23 @@ class W08Log(QWidget):
idx_end = self.max_item_number * current
self.treeW.clear()
self.treeW.setUniformRowHeights(True)
for record in records[idx_start:idx_end]:
record = [str(_) for _ in record]
item = QTreeWidgetItem(self.treeW, record)
self.treeW.addTopLevelItem(item)
colors = {"info": QColor(144, 238, 144), "warning": QColor(255, 240, 210), "error": QColor(255, 220, 220), "exception": QColor(255, 220, 220), "unknown": QColor(255, 220, 220)}
color = colors[record[2]]
for col in range(5):
colors = {
"info": QColor(255, 255, 255), # 白色
"warning": QColor(244, 164, 96), # 棕橙色
"error": QColor(205, 92, 92), # 印度红
"exception": QColor(70, 130, 180), # 钢蓝色
"unknown": QColor(190, 190, 190) # 灰色
}
# colors = {"info": "#FFFFFF", "warning": "#F4A460", "error": "#CD5C5C", "exception": "#4682B4", "unknown": "#BEBEBE"}
level = record[2]
color = colors.get(level, QColor(255, 255, 255))
for col in range(self.treeW.columnCount()):
item.setBackground(col, color)
item.setTextAlignment(0, Qt.AlignmentFlag.AlignRight)
self.treeW.addTopLevelItem(item)
self.treeW.scrollToBottom()
def show_single_log(self, item, column):

View File

@@ -15,6 +15,7 @@ class W09About(QWidget):
def ui_init(self):
self.lb_test = QLabel(f"testing text on widget: \n{__file__}", parent=self)
self.lb_test.setObjectName("lb_test")
def setup_slot(self):
...

View File

@@ -15,6 +15,7 @@ class W10Practical(QWidget):
def ui_init(self):
self.lb_test = QLabel(f"testing text on widget: \n{__file__}", parent=self)
self.lb_test.setObjectName("lb_test")
def setup_slot(self):
...

View File

@@ -15,6 +15,7 @@ class W20Efficiency(QWidget):
def ui_init(self):
self.lb_test = QLabel(f"testing text on widget: \n{__file__}", parent=self)
self.lb_test.setObjectName("lb_test")
def setup_slot(self):
...

View File

@@ -15,6 +15,7 @@ class W30Financial(QWidget):
def ui_init(self):
self.lb_test = QLabel(f"testing text on widget: \n{__file__}", parent=self)
self.lb_test.setObjectName("lb_test")
def setup_slot(self):
...