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