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")