Я хочу каким -то образом показать журнал приложения на графическом интерфейсе. Он добавляется в регистрацию в качестве обработчика в init. Линейная передача просто отлично. Для этого я просто делаю < /p>
class QTextEditLogger(QTextEdit, logging.Handler):
def __init__(self, parent, level=NOTSET):
QTextEdit.__init__(self, parent)
logging.Handler.__init(self, level=level)
def emit(self, record):
msg = self.format(record)
self.append(msg)
< /code>
Когда я пытаюсь использовать форматирование Rich.richhandler, чтобы получить цветной текст и вставить его в качестве HTML в qtextedit, цвет работает нормально; Тем не менее, текст не находится надлежащим образом распределенным/увеличенным. Консоль. Затем я беру текст консоли через export_html () , который, в свою очередь, добавляется в Textedit через inserthtml () . Я даже пытался установить размер консоли на ширину виджета, но это не помогло.import sys
import os
from time import sleep
import logging
from logging import Handler, NOTSET
from rich.logging import RichHandler
from rich.console import Console
from PySide6.QtWidgets import QTextEdit, QApplication, QMainWindow
from PySide6.QtGui import QTextCursor, QTextOption
class QTextEditLogger(QTextEdit, Handler):
"""A QTextEdit logger that uses RichHandler to format log messages."""
def __init__(self, parent=None, level=NOTSET):
QTextEdit.__init__(self, parent)
Handler.__init__(self,level=level)
self.console = Console(file=open(os.devnull, "wt"), record=True,width=42, height=12, soft_wrap=False)
self.rich_handler = RichHandler(show_time=False, show_path=False, show_level=True, markup=True, console=self.console, log_time_format="[%X]", level=self.level)
self.rich_handler.setLevel(self.level)
QTextEdit.setWordWrapMode(self, QTextOption.WrapMode.NoWrap)
self.setAcceptRichText(True)
self.setReadOnly(True)
def showEvent(self, arg__1):
self.console.width = self.width()//self.fontMetrics().averageCharWidth() # Approximate character width
self.console.height = self.height()//self.fontMetrics().height() # Approximate character height
return super().showEvent(arg__1)
def emit(self, record) -> None:
"""Override the emit method to handle log records."""
self.rich_handler.emit(record)
html = self.console.export_html(clear=True, inline_styles=True)
self.insertHtml(html)
self.verticalScrollBar().setSliderPosition(self.verticalScrollBar().maximum())
c = self.textCursor()
c.movePosition(QTextCursor.End)
self.setTextCursor(c)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QTextEdit Example")
# Create a QTextEdit widget
self.text_edit = QTextEditLogger(self)
self.setCentralWidget(self.text_edit)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
# Set up logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(window.text_edit)
logger.info("This is an info message.")
sleep(.5)
logger.warning("This is a warning message.")
sleep(.5)
for i in range(10):
logger.debug(f"This is a debug message {i}.")
logger.error("This is an error message.")
sys.exit(app.exec_())
Подробнее здесь: https://stackoverflow.com/questions/795 ... ml-text-ca
Вход в графический интерфейс Pyside6 с Rich.logging Richhandler и QtexteDit HTML Text, вызывает проблемы между расстояни ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как архитектура HTML/Rich Text Fields с помощью пользовательских активов? [закрыто]
Anonymous » » в форуме Html - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-