116 lines
3.6 KiB
Python
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()) |