pyqt4 qpainter 文本绘图上的段错误

pyqt4 qpainter segfault on a text drawing

我想在控制台应用程序中使用 qpainter 绘图功能;为此,我尝试将 QCoreApplication 与触发作业处理的虚构计时器一起使用:

#!/usr/bin/python2

from PyQt4 import QtCore, QtGui, Qt
from signal import signal, SIGINT
from sys import argv, exit

def sigint_handler(*args):
    QtGui.QApplication.quit()

class Processor(QtCore.QObject):
    def __init__(self):
        super(Processor, self).__init__()

    def execute(self):
        image = QtGui.QImage('/tmp/ramdisk/output.png')
        painter = QtGui.QPainter(image)
        painter.drawText(10, 10, 'Text')
        painter.end()
        image.save('/tmp/ramdisk/output.png')
        QtGui.QApplication.quit()

if __name__ == "__main__":
    signal(SIGINT, sigint_handler)
    app = QtCore.QCoreApplication(argv)
    job = Processor()
    QtCore.QTimer.singleShot(0, job.execute)
    exit(app.exec_())

虽然它在 drawRect() 等简单的事情上工作正常,但在 drawText() 上它会因分段错误而崩溃。

那么,pyqt4 真的不能在控制台应用程序中使用字体吗?

在使用 QtGui 类 and/or 函数之前,您 必须 创建一个 QApplication (不是 QCoreApplication).对于控制台应用程序,只需将 GUIenabled 参数设置为 False:

    app = QtGui.QApplication(argv, False)

在 X11 上,这避免了初始化 window 系统,并且不连接到 X 服务器。