提交新建内容
This commit is contained in:
99
log_style_manager.py
Normal file
99
log_style_manager.py
Normal file
@@ -0,0 +1,99 @@
|
||||
# log_style_manager.py
|
||||
|
||||
from PySide6.QtGui import QTextDocument, QTextBlockFormat, QTextCharFormat, QFont, QColor
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtGui import QTextCursor
|
||||
|
||||
|
||||
class LogStyleManager:
|
||||
"""
|
||||
日志样式管理器,统一控制 QTextEdit 的字体、颜色、行间距等
|
||||
"""
|
||||
|
||||
def __init__(self, text_edit):
|
||||
self.text_edit = text_edit
|
||||
self.default_font = self.text_edit.font()
|
||||
self.default_style = {
|
||||
'default': {'color': 'white', 'bold': False},
|
||||
'info': {'color': 'cyan', 'bold': False},
|
||||
'warning': {'color': 'yellow', 'bold': False},
|
||||
'error': {'color': 'red', 'bold': False},
|
||||
'trigger': {'color': '#28a745', 'bold': False},
|
||||
}
|
||||
|
||||
def set_log_type_mapping(self, mapping=None):
|
||||
"""
|
||||
设置日志类型与样式的映射关系
|
||||
:param mapping: dict,键为日志类型(如 'info'),值为对应的样式字典
|
||||
样式字典支持:
|
||||
- color: 颜色字符串
|
||||
- bold: 是否加粗
|
||||
- background: 背景颜色(可选)
|
||||
- italic: 是否斜体
|
||||
"""
|
||||
default_mapping = {
|
||||
'default': {'color': 'white', 'bold': False},
|
||||
'info': {'color': 'cyan', 'bold': False},
|
||||
'warning': {'color': 'yellow', 'bold': False},
|
||||
'error': {'color': 'red', 'bold': True}, # 错误信息加粗
|
||||
'trigger': {'color': '#28a745', 'bold': False},
|
||||
'debug': {'color': 'gray', 'italic': True} # 新增 debug 类型
|
||||
}
|
||||
|
||||
# 如果传入了新的映射规则,则更新默认样式
|
||||
if mapping is not None:
|
||||
self.default_style = mapping
|
||||
else:
|
||||
self.default_style = default_mapping
|
||||
|
||||
def set_global_font(self, font_family="微软雅黑", font_size=13):
|
||||
"""设置全局字体"""
|
||||
self.default_font.setFamily(font_family)
|
||||
self.default_font.setPointSize(font_size)
|
||||
self.text_edit.setFont(self.default_font)
|
||||
|
||||
def set_letter_spacing(self, spacing=5):
|
||||
"""设置字间距"""
|
||||
self.default_font.setLetterSpacing(QFont.SpacingType.AbsoluteSpacing, spacing)
|
||||
self.text_edit.setFont(self.default_font)
|
||||
|
||||
def set_line_height(self, line_height=150):
|
||||
"""设置段落行高(百分比)"""
|
||||
doc = self.text_edit.document()
|
||||
block_format = QTextBlockFormat()
|
||||
|
||||
block_format.setLineHeight(float(line_height), 0)
|
||||
|
||||
block_format.setTopMargin(0)
|
||||
block_format.setBottomMargin(0)
|
||||
|
||||
cursor = QTextCursor(doc)
|
||||
cursor.select(QTextCursor.SelectionType.Document) # 修改此处
|
||||
cursor.mergeBlockFormat(block_format)
|
||||
cursor.clearSelection()
|
||||
|
||||
def apply_log_style(self, log_type='default'):
|
||||
"""返回适用于当前日志类型的 QTextCharFormat"""
|
||||
style = self.default_style.get(log_type.lower(), self.default_style['default'])
|
||||
fmt = QTextCharFormat()
|
||||
fmt.setForeground(QColor(style['color']))
|
||||
if style.get('bold', False):
|
||||
fmt.setFontWeight(QFont.Weight.Bold)
|
||||
return fmt
|
||||
|
||||
def insert_log(self, message, log_type='default'):
|
||||
"""插入带样式的日志信息"""
|
||||
fmt = self.apply_log_style(log_type)
|
||||
|
||||
cursor = self.text_edit.textCursor()
|
||||
cursor.movePosition(QTextCursor.End)
|
||||
cursor.mergeCharFormat(fmt)
|
||||
cursor.insertText(message + "\n")
|
||||
self.text_edit.setTextCursor(cursor)
|
||||
self.text_edit.ensureCursorVisible()
|
||||
|
||||
def reset_styles(self):
|
||||
"""重置所有样式到默认状态"""
|
||||
self.text_edit.setStyleSheet("")
|
||||
self.text_edit.setFont(self.default_font)
|
||||
self.set_line_height(100)
|
||||
Reference in New Issue
Block a user