Qt4 / PyQt4 — Невозможно установить шрифт по умолчанию для QTextDocument

Мой код такой:

from PyQt4 import QtGui

doc = QtGui.QTextDocument()
d_font = QtGui.QFont('Times New Roman')
doc.setDefaultFont(d_font)

cur = QtGui.QTextCursor(doc)
cur.insertText('sample text')

writer = QtGui.QTextDocumentWriter()
writer.setFormat(writer.supportedDocumentFormats()[1])
writer.setFileName('CV')
writer.write(doc)

«Образец текста» в выводе по-прежнему «Sans» на моем компьютере, а не «Times New Roman». Я убедился, что мой компьютер имеет шрифт «Times New Roman». Я подозреваю, что это ошибка. Я использую PyQt v4.9.5.

РЕДАКТИРОВАТЬ: Я использую Ubuntu 12.04. Я совершенно уверен, что PyQt4 может найти шрифт, потому что работает следующий код:

d_font = QFont('Times New Roman')
char_fmt = QTextCharFormat()
char_fmt.setFont(d_font)
cur.insertText('Times New Roman', char_fmt)

Похоже, что не все форматирование поддерживается при сохранении в формате odt / odt, но все работает, как ожидается, при печати в PDF.

from PyQt4.QtGui import *
import sys

doc = QTextDocument()
cur = QTextCursor(doc)

d_font = QFont('Times New Roman')
doc.setDefaultFont(d_font)

table_fmt = QTextTableFormat()
table_fmt.setColumnWidthConstraints([
QTextLength(QTextLength.PercentageLength, 30),
QTextLength(QTextLength.PercentageLength, 70)
])
table = cur.insertTable(5,2, table_fmt)
cur.insertText('sample text 1')
cur.movePosition(cur.NextCell)
cur.insertText('sample text 2')

# Print to a pdf file
# QPrinter: Must construct a QApplication before a QPaintDevice
app = QApplication(sys.argv)
printer = QPrinter(QPrinter.HighResolution)
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName('sample.pdf')

# Save to file
writer = QTextDocumentWriter()
writer.setFormat(writer.supportedDocumentFormats()[1])
writer.setFileName('sample.odt')
writer.write(doc)

setDefaultfonts и setColumnWidthConstraints влияют на sample.pdf, но не на sample.odt.

1

Решение

Я могу видеть такое же поведение на моем Ubuntu Oneiric box с PyQt4.8.5. Я не думаю, что это ошибка. Шрифт написанного текста зависит от шрифта курсора, используемого для написания текста.

Следующее должно работать для вас:

from PyQt4 import QtGui

doc = QtGui.QTextDocument()
cur = QtGui.QTextCursor(doc)

d_font = QtGui.QFont('Courier')
c_format = QtGui.QTextCharFormat()
c_format.setFont(d_font)
cur.setCharFormat(c_format)
cur.insertText('sample text')

writer = QtGui.QTextDocumentWriter()
writer.setFormat(writer.supportedDocumentFormats()[1])
writer.setFileName('CV')
writer.write(doc)

Я использовал Courier, потому что Times New Roman не установлен в моей системе.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]