0
我一直在尋找其他有關此錯誤的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的工作方式。
修訂
錯誤消息,正是因爲我看到它(可悲的是W/O行號):
$ ./StackOverflow.py
QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::end: Painter not active, aborted
我現在不能運行代碼,你能指出在哪一行發生異常嗎?此外,請確認您獲得的代碼與您發佈的代碼完全相同。 – Schollii
請準備一個顯示錯誤的最小的運行示例。現在代碼不會運行,因爲其他一些可能不相關的問題。 – Trilarion
奇數。我貼出了我正在運行的內容,現在我附上了我得到的唯一錯誤消息。 (我正在盡我所能,讓它成爲一個最小的運行示例,我從中剝離了很多。)但是我會看到還有什麼我可以擺脫以獲得相同的錯誤。 – Ubuntourist