如何从QTextDocument返回特定字体大小和颜色的文本?

2024-10-01 07:10:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QTextEdit,里面有一些格式化的文本。如何返回与特定字体大小和/或字体颜色匹配的所有文本?你知道吗

我已经试过了QTextDocument.objectForFormat格式()方法,作为参数,我提供了一个具有属性FontPointSize的QTextFormat对象,但它返回None。你知道吗

import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QApplication
from PyQt5.QtGui import QColor
from PyQt5 import Qt
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.textEdit.setTextColor(QColor('#00aaff'))
        self.textEdit.setFontPointSize(14.0)
        self.textEdit.insertPlainText('Title\n')
        self.textEdit.setTextColor(QColor('#e0e0e0'))
        self.textEdit.setFontPointSize(11.0)
        self.textEdit.insertPlainText('content\n')
        self.textEdit.setTextColor(QColor('#00aaff'))
        self.textEdit.setFontPointSize(14.0)
        self.textEdit.insertPlainText('Title2\n')
        self.textEdit.setTextColor(QColor('#e0e0e0'))
        self.textEdit.setFontPointSize(11.0)
        self.textEdit.insertPlainText('content_title2')
        self.printFontSizes()
        self.show()

    def printFontSizes(self):
        doc = self.textEdit.document()
        for i in range(doc.blockCount()):
            print(doc.findBlockByNumber(i).text(),': ',
            doc.findBlockByNumber(i).charFormat().fontPointSize())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainWindow()
    sys.exit(app.exec_())

运行上述代码将打印以下内容:

Title :  0.0
content :  14.0
Title2 :  11.0
content_title2 :  14.0

我是不是做错什么了?你知道吗


Tags: from文本importselfdocsyscontentpyqt5
1条回答
网友
1楼 · 发布于 2024-10-01 07:10:17

因为在我的特定示例中,上面的代码显示了错误的字体大小,所以我使用QTextCursor遍历qtexted中的每一行并检查每一行的字体大小,从而解决了这个问题。以下是相关代码:

#!/bin/python3
import sys
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QApplication
from PyQt5.QtGui import QColor, QTextCursor
from PyQt5 import Qt
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.textEdit.setTextColor(QColor('#00aaff'))
        self.textEdit.setFontPointSize(14.0)
        self.textEdit.insertPlainText('Title\n')
        self.textEdit.setTextColor(QColor('#e0e0e0'))
        self.textEdit.setFontPointSize(11.0)
        self.textEdit.insertPlainText('content\n')
        self.textEdit.setTextColor(QColor('#00aaff'))
        self.textEdit.setFontPointSize(14.0)
        self.textEdit.insertPlainText('Title2\n')
        self.textEdit.setTextColor(QColor('#e0e0e0'))
        self.textEdit.setFontPointSize(11.0)
        self.textEdit.insertPlainText('content_title2\n')
        self.textEdit.insertPlainText('content2_title2\n')
        self.printFontSizes()
        self.show()

    def printFontSizes(self):
        doc = self.textEdit.document()
        self.textEdit.moveCursor(QTextCursor.Start)
        for i in range(doc.blockCount()):
            if self.textEdit.fontPointSize() == 14.0:
                print(doc.findBlockByNumber(i).text())
            self.textEdit.moveCursor(QTextCursor.NextBlock)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainWindow()
    sys.exit(app.exec_())

相关问题 更多 >