【问题标题】:Qt4/PyQt4 - Can not set the default font for QTextDocumentQt4/PyQt4 - 无法为 QTextDocument 设置默认字体
【发布时间】:2012-10-07 08:08:12
【问题描述】:

我的代码是这样的:

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”字体。我怀疑这是一个错误。我m 使用 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。

【问题讨论】:

  • 你的操作系统是什么?你确定 Python 能找到字体吗?
  • @Antoni4040 我使用的是 Ubuntu 12.04。我确信 PyQt4 可以找到字体。请在问题中查看我的更新。

标签: c++ python qt4 pyqt4 qtextdocument


【解决方案1】:

我可以在带有 PyQt4.8.5 的 Ubuntu Oneiric 机器上看到相同的行为。我不认为这是一个错误。书写文字的字体取决于书写文字时使用的光标字体。

以下内容应该适合您:

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。

【讨论】:

  • 感谢您的回答。我刚刚发现 PyQt4 在保存到 odt/odf 文件和打印到 pdf 文件之间的行为不同。请看我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多