pyqt5 textedit 删除经过指定行的行

Posted

技术标签:

【中文标题】pyqt5 textedit 删除经过指定行的行【英文标题】:pyqt5 textedit delete lines as they move past specified line 【发布时间】:2017-07-12 04:37:48 【问题描述】:

我想设置 PYQT Qtextedit 小部件并使用它来监控另一个应用程序活动日志(如 Linux 上的 tail -f)。从长远来看,我担心它运行时间过长并使用大量内存来构建文本。是否可以设置一个限制,以便删除越过第 x 行的文本?从我发现它似乎需要自定义工作,如果存在,我想找到一个限制器设置。

【问题讨论】:

你可以尝试一下吗? 你想要的是在 QTextEdit 中设置最大行数,如果有新行你必须删除第一个写的行,对吗? @eyllanesc 是的,这正是我所追求的。 @AlexanderHuszagh 我是 pyqt 的新手,这是我第一次使用文本编辑器。在开始了解它之前,我一直在做研究,但我没有找到一种方法来做我想做的事,所以我想我会问。如果我应该使用不同的小部件,我想在使用 qtextedit 小部件进行测试之前找出答案。我将学习所有关于文本编辑器的知识,但对于我当前的项目,我想确保我使用正确的工具。 @sidnical,如果您需要提供字体自定义,您可以轻松地将 QStyledItemDelegate 与 QTextDocument 一起使用。 【参考方案1】:

QPlainTextEdit 是支持纯文本的高级查看器/编辑器。它针对处理大型文档和快速响应用户输入进行了优化。

为了限制可见行的数量你必须使用setMaximumBlockCount,在下面的例子中我展示了使用:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

counter = 0

def addText():
    global counter
    w.appendhtml("<font size=\"3\" color=\"red\"></font>".format(counter))
    counter += 1

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QPlainTextEdit()

    timer = QTimer()
    timer.timeout.connect(addText)
    timer.start(1000)
    w.setMaximumBlockCount(4)
    w.show()
    sys.exit(app.exec_())

如果您想使用字体,您可以使用 HTML 轻松完成。

【讨论】:

以上是关于pyqt5 textedit 删除经过指定行的行的主要内容,如果未能解决你的问题,请参考以下文章

pyqt5 用Qtableview鼠标滑过去时怎么样能经过的行发生颜色变化?

指定在MS SQL Server中返回的行的顺序

通过要删除的行的多个逻辑条件子集数据帧

MySQL学习笔记11复制错误处理删除不存在的行的问题

2018-1-16 6周2次课

QT textedit实现查找替换