brisonus_app_eq/component/widget_log/widget_log.py

116 lines
3.6 KiB
Python
Raw Normal View History

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())