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

Hel*_*bye 2 python qpainter pyside

我有以下测试代码:

import sys
from PySide.QtGui import *

app = QApplication(sys.argv)
widget = QWidget()
painter = QPainter(widget)
Run Code Online (Sandbox Code Playgroud)

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

QPainter::begin: Paint device returned engine == 0, type: 1
Run Code Online (Sandbox Code Playgroud)

为什么?

PRM*_*reu 5

如果要在窗口小部件中绘制内容,则需要使用paintEvent窗口小部件来定义窗口小部件QPainter.这种方法允许声明一个Qpainterimmediat绘画,并通过它避免调用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_())
Run Code Online (Sandbox Code Playgroud)

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

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