Я смотрел на другие вопросы StackOverflow относительно этой ошибки (и в других местах в Интернете), но я не понимаете, как ответы относятся к моему коду. Таким образом, я надеюсь на то, что для меня имеет смысл какой-то фиксированный пример, или лучшее объяснение того, как и когда происходят события.Я не понимаю, почему я получаю QPainter :: begin: Виджетная картина может начинаться только в результате paintEvent
Код, приведенный ниже, предназначался для определения размеров экрана, на котором он работает, измените его размер и нарисуйте круг в центре, который занимает большую часть доступной экранной недвижимости. Он попытался сделать намного больше, но я убрал его - я надеюсь. Теперь он просто пытается нарисовать круг.
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import sys
from PySide.QtCore import *
from PySide.QtGui import *
class Viewport(QGraphicsView):
def __init__(self, parent=None):
super(Viewport, self).__init__(parent)
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
def paintEvent(self, event):
super(Viewport, self).paintEvent(event)
qp = QPainter()
qp.begin(self)
square = QRect(10, 10, 30, 30)
qp.drawEllipse(square)
qp.end()
class UI(QDialog):
def __init__(self, parent=None):
super(UI, self).__init__(parent)
self.view = Viewport(self)
gridLayout = QGridLayout()
gridLayout.addWidget(self.view, 0, 0, 1, 1)
self.setLayout(gridLayout)
def resizeEvent(self, event):
super(UI, self).resizeEvent(event)
self.view.setFrameShape(QFrame.NoFrame)
self.view.setSceneRect(0, 0, 400, 400)
self.view.setFixedSize(400, 400)
app = QApplication(sys.argv)
ui = UI()
ui.show()
sys.exit(app.exec_())
Вышеупомянутый был удалён из сломанного кода, который имел движущийся элемент SVG, и изначально изначально был заполнен градиент. Элемент SVG отображался и двигался хорошо, но круг никогда не появлялся.
Круг, заполненный градиентом, отлично работал в другой программе, когда он был нарисован paintEvent для QGroupBox, но я не могу понять, как работают QGraphicsScene и QGraphicsView.
ОБНОВЛЕНО
сообщение об ошибке, точно так, как я это вижу (к сожалению, без номеров строк):
$ ./StackOverflow.py
QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::end: Painter not active, aborted
Я не могу запустить код прямо сейчас, можете ли вы указать, в какой строке возникает исключение? Также подтвердите, что вы получаете исключение с кодом точно так же, как и вы опубликовали. – Schollii
Подготовьте минимальный пример, показывающий ошибку. В настоящий момент код не запускается из-за некоторых других, возможно, несвязанных проблем. – Trilarion
Нечетные. Я отправил точно, что я запускаю, и теперь я добавил единственное сообщение об ошибке, которое я получил. (И я делал все возможное, чтобы сделать его минимальным примером. Я удалил LOT из него.) Но я посмотрю, что еще я смогу избавиться, чтобы получить ту же ошибку. – Ubuntourist