brisonus_app_eq/component/widget_log/widget_log.py

116 lines
3.6 KiB
Python

from PySide6.QtWidgets import QWidget, QFileDialog, QGroupBox, QVBoxLayout
from PySide6.QtCore import Qt, Signal
from datetime import datetime
import logging
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
from component.widget_log.ui_widget_log import Ui_Widget_Log
class Widget_Log(QWidget):
# 定义信号
log_level_changed = Signal(str) # 日志级别改变信号
def __init__(self, parent=None):
super().__init__(parent)
# 初始化UI
self.ui = Ui_Widget_Log()
self.ui.setupUi(self)
# 设置日志级别映射
self.log_levels = {
"ALL": logging.NOTSET,
"DEBUG": logging.DEBUG,
"INFO": logging.INFO,
"WARNING": logging.WARNING,
"ERROR": logging.ERROR
}
# 连接信号
self.setup_connections()
self.ui.pushButton_Clear.setVisible(False)
self.ui.pushButton_Save.setVisible(False)
self.ui.comboBox_LogLevel.setVisible(False)
def setup_connections(self):
"""设置信号连接"""
# 连接清除按钮
self.ui.pushButton_Clear.clicked.connect(self.clear_log)
# 连接保存按钮
self.ui.pushButton_Save.clicked.connect(self.save_log)
# 连接日志级别改变
self.ui.comboBox_LogLevel.currentTextChanged.connect(
self._on_log_level_changed
)
def append_log(self, level: str, message: str):
"""添加日志
Args:
level: 日志级别
message: 日志消息
"""
# 获取当前选择的日志级别
current_level = self.ui.comboBox_LogLevel.currentText()
# 检查是否需要显示该级别的日志
if (self.log_levels[level] >= self.log_levels[current_level] or
current_level == "ALL"):
# 获取当前时间
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
# 格式化日志消息
log_text = f"[{timestamp}] [{level}] {message}"
# 添加到文本框
self.ui.plainTextEdit_Log.appendPlainText(log_text)
def clear_log(self):
"""清除日志"""
self.ui.plainTextEdit_Log.clear()
def save_log(self):
"""保存日志到文件"""
# 获取保存文件路径
file_path, _ = QFileDialog.getSaveFileName(
self,
"Save Log",
"",
"Log Files (*.log);;Text Files (*.txt);;All Files (*.*)"
)
if file_path:
try:
# 保存日志内容
with open(file_path, 'w', encoding='utf-8') as f:
f.write(self.ui.plainTextEdit_Log.toPlainText())
except Exception as e:
self.append_log("ERROR", f"Failed to save log: {str(e)}")
def _on_log_level_changed(self, level: str):
"""处理日志级别改变"""
self.log_level_changed.emit(level)
if __name__ == '__main__':
import sys
from PySide6.QtWidgets import QApplication
app = QApplication(sys.argv)
# 创建并显示窗口
window = Widget_Log()
window.show()
# 添加一些测试日志
window.append_log("DEBUG", "This is a debug message")
window.append_log("INFO", "This is an info message")
window.append_log("WARNING", "This is a warning message")
window.append_log("ERROR", "This is an error message")
sys.exit(app.exec())