Qt4/PyQt4无法设置QTextDocumen的默认字体

2024-09-30 18:13:27 发布

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

我的代码是这样的:

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可以找到字体,因为下面的代码可以工作:

^{pr2}$

在以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影响示例.pdf,但不是样品.odt. 在


Tags: samplenewdocpdfodttablewriterfont
1条回答
网友
1楼 · 发布于 2024-09-30 18:13:27

我可以在我的ubuntuoneiric设备上看到同样的行为。我不认为这是个虫子。所写文本的字体取决于用于写入文本的光标的字体。在

以下内容应该对您有用:

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。在

相关问题 更多 >