Вход в графический интерфейс Pyside6 с Rich.logging Richhandler и QtexteDit HTML Text, вызывает проблемы между расстояниPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Вход в графический интерфейс Pyside6 с Rich.logging Richhandler и QtexteDit HTML Text, вызывает проблемы между расстояни

Сообщение Anonymous »

Я хочу каким -то образом показать журнал приложения на графическом интерфейсе. Он добавляется в регистрацию в качестве обработчика в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»