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 服务器。
我想在控制台应用程序中使用 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 服务器。