如何解决Windows和Linux上的QPlainTextEdit图形错误
我正在编写一个简单的GUI,在QPlainTextEdit中显示实时更新的日志。
这是我要传递给logging.Logger.addHandler()
的处理程序
class QPlainTextEditLogger(logging.Handler):
"""Modified From: https://stackoverflow.com/questions/28655198/best-way-to-display-logs-in-pyqt"""
def __init__(self,parent):
super().__init__()
self.widget = QPlainTextEdit()
self.widget.setReadOnly(True)
def emit(self,record):
msg = self.format(record)
self.widget.appendplainText(msg)
self.widget.moveCursor(QtGui.QTextCursor.End)
def write(self,m):
pass
它会正确地向QPlainTextEdit元素发出我要查找的日志条目,但是,无论平台如何(或启用/禁用合成),图形故障都会持续存在。
这是行为的视频:
https://i.imgur.com/DTUbfcM.mp4
除非我手动滚动框或调整拆分器的大小,否则行会被切成两半。
moveCursor(QtGui.QTextCursor.End)
可能是什么原因造成的?
编辑:我尝试通过以下示例重现此内容,但我没有遇到相同的问题。我认为这可能是由于我可能在主窗口之外的原始代码中创建了QPlainTextEdit()
吗?
import sys
import time
from PyQt5 import QtWidgets,uic,QtGui
from PyQt5.QtWidgets import QPlainTextEdit
from PyQt5.QtCore import QThread,pyqtSignal
class Worker(QThread):
newLine = pyqtSignal(str)
def __init__(self):
super().__init__()
def run(self):
for x in range(300):
self.newLine.emit(f"Testing a very long line so that the words will wrap and hopefully reproduce the issue Testing a very long line so that the words will wrap and hopefully reproduce the issue {x}")
time.sleep(0.1)
class Window(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.editor = QPlainTextEdit(self)
self.editor.setReadOnly(True)
self.button = QtWidgets.QPushButton(self)
self.button.setText("Go for it")
self.layout = QtWidgets.qformlayout()
self.layout.addChildWidget(self.editor)
self.layout.addChildWidget(self.button)
self.button.clicked.connect(self.start_button_pressed)
self.setCentralWidget(self.editor)
self.show()
def add_line(self,msg: str):
self.editor.appendplainText(msg)
def start_button_pressed(self):
self.worker = Worker()
self.worker.newLine.connect(self.add_line)
self.worker.start()
app = QtWidgets.QApplication(sys.argv)
window = Window()
app.exec_()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。