DrawText с двумя переменными и каждый другой шрифт

Я не знаю, возможно ли выбрать другой текстовый шрифт для каждой переменной внутри одного и того же художника.

painter.drawText(80, 290, self.text1.text() + self.text2.text())

Это пример: для text1 хочу оставить его по умолчанию как я установил в маляре (boldUnderline) в то время как text2 буду иметь (boldUnderline) но я также хочу изменить шрифт текста на другой, скажем, Arial, смысл должен отличаться от text1 потому что он должен быть на другом языке

Вот полный код:

underlineItalic = QFont()
underlineItalic.setItalic(True)
underlineItalic.setUnderline(True)

painter = QtGui.QPainter()
painter.setFont(boldUnderline)
painter.drawText(80, 290, self.text1.text() + self.text2.text())

Есть ли возможность сделать это на этом пути? Если так не может быть, есть ли другой способ?

1 ответ

Решение

Для выполнения этой задачи вы можете использовать QTextDocument, чтобы установить формат, который мы используем QTextCharFormat() где вы должны установить шрифт.

doc = QTextDocument()
cursor = QTextCursor(doc)

fm = QTextCharFormat()
font = painter.font()
font.setBold(True) 
font.setUnderline(True)
fm.setFont(font) # set QFont

cursor.insertText(text1, fm) # insert text with new format.

# establish new format for example:
# font.setItalic(True) 
# font.setBold(True)

cursor.insertText(text1, fm) 
painter.translate(80, 290)
doc.drawContents(painter)

Пример:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    img = QImage(640, 480, QImage.Format_RGB32);
    img.fill(Qt.white);

    text1, text2 ="Stack Overflow".split()
    painter = QPainter(img);

    doc = QTextDocument()
    cursor = QTextCursor(doc)

    fm = QTextCharFormat()
    font = painter.font()
    font.setItalic(True) 
    font.setUnderline(True)
    fm.setFont(font)

    cursor.insertText(text1, fm)

    font.setItalic(True) 
    font.setBold(True)
    font.setUnderline(False)
    fm.setFont(font)

    cursor.insertText(text2, fm)

    painter.translate(80, 290)
    doc.drawContents(painter)

    painter.end();
    img.save("text.png")

Выход:

введите описание изображения здесь

Вы также можете использовать HTML в QTextDocument:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    img = QImage(640, 480, QImage.Format_RGB32);
    img.fill(Qt.white);

    text1, text2 ="Stack Overflow".split()
    painter = QPainter(img);

    doc = QTextDocument()
    cursor = QTextCursor(doc)
    cursor.insertHtml("<i><u>{first}</u></i><b><i>{second}<b></i>".format(first=text1, second=text2))

    painter.translate(80, 290)
    doc.drawContents(painter)

    painter.end();
    img.save("text.png")

введите описание изображения здесь

Другие вопросы по тегам