PyQt. QPainter. Ошибка вызова
При простом вызове QPainter:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.show()
qp = QPainter(self)
qp.begin(self)
qp.end()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Компилятор выдаёт следующую ошибку:
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::drawPoints: Painter not active
QPainter::end: Painter not active, aborted
Остальная программа работает, но ни какие методы QPainter такие как
drawPoint() и т.п. не работают. Что делать?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Операции рисования обычно выполняются в функции события paintEvent().
В этой функции мы обычно устанавливаем сначала кисть, кисть или шрифт, а затем вызываем связанные методы для рисования.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.resize(600, 600)
self.pen1 = QPen()
self.pen1.setColor(Qt.green)
self.pen2 = QPen(Qt.SolidLine)
self.pen2.setWidth(6)
self.pen3 = QPen(Qt.DashLine)
self.pen4 = QPen(Qt.DotLine)
self.pen5 = QPen(Qt.DashDotLine)
self.pen6 = QPen(Qt.DashDotDotLine)
self.pen7 = QPen(Qt.CustomDashLine)
self.pen7.setDashPattern([6, 2, 18, 2])
self.pen8 = QPen(Qt.SolidLine)
self.pen8.setWidth(6)
self.pen8.setCapStyle(Qt.RoundCap)
self.pen9 = QPen(Qt.SolidLine)
self.pen9.setWidthF(6)
self.pen9.setJoinStyle(Qt.MiterJoin)
def paintEvent(self, QPaintEvent):
painter = QPainter(self)
painter.setPen(self.pen1)
painter.drawLine(100, 10, 500, 10)
painter.setPen(self.pen2)
painter.drawLine(100, 30, 500, 30)
painter.setPen(self.pen3)
painter.drawLine(100, 50, 500, 50)
painter.setPen(self.pen4)
painter.drawLine(100, 70, 500, 70)
painter.setPen(self.pen5)
painter.drawLine(100, 90, 500, 90)
painter.setPen(self.pen6)
painter.drawLine(100, 110, 500, 110)
painter.setPen(self.pen7)
painter.drawLine(100, 130, 500, 130)
painter.setPen(self.pen8)
painter.drawLine(100, 150, 500, 150)
painter.setPen(self.pen2)
painter.drawRect(100, 170, 400, 200)
painter.setPen(self.pen9)
painter.drawRect(100, 390, 400, 200)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
