“QPainter :: begin:使用PySide将Paint设备返回引擎== 0,输入:1”

时间:2017-08-02 10:31:26

标签: python pyside qpainter

我有以下测试代码:

import sys
from PySide.QtGui import *

app = QApplication(sys.argv)
widget = QWidget()
painter = QPainter(widget)

创建QPainter对象后,我收到错误消息:

QPainter::begin: Paint device returned engine == 0, type: 1

为什么?

1 个答案:

答案 0 :(得分:5)

如果您想在窗口小部件中绘制内容,则需要使用窗口小部件的paintEvent来定义QPainter。此方法允许为immediat绘画声明Qpainter,并通过它避免调用Qpainter.begin()Qpainter.end()的方式。

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawLine(0, 0, 100, 100)

app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

http://doc.qt.io/qt-5/qpainter.html#details

  

警告:当paintdevice是一个小部件时,QPainter只能在paintEvent()函数或paintEvent()调用的函数中使用。