import sys, csv
from PySide import QtGui, QtCore
from mainStrato import *
X_START = 10
Y_START = 15
MAX_WIDTH = 1350
MAX_LENGH = 1650
ZOOM = 2.5
WIDTH_PEZZO = 150
LENGH_PEZZO = 600
CENTER_OFFSET_X = 15
CENTER_OFFSET_Y = 0
class Strato(QtGui.QMainWindow, Ui_MainWindow):
#Apre il file CSV e copia le singole righe in una lista
def __init__(self, parent=None):
super(Strato, self).__init__(parent)
self.setupUi(self)
def paintEvent(centralwidget, e):
qp = QtGui.QPainter()
qp.begin(centralwidget)
print "paint event"
qp.end()
self.drawRectangles(qp)
def drawRectangles(self, qp):
color = QtGui.QColor(0, 0, 0)
color.setNamedColor('#d4d4d4')
qp.setPen(color)
qp.setBrush(QtGui.QColor(200, 0, 0))
coordCarro = QtCore.QRectF(X_START, Y_START, MAX_WIDTH/ZOOM, MAX_LENGH/ZOOM)
qp.drawRect(coordCarro)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Strato()
window.show()
sys.exit(app.exec_())
mainstrato
是从pyside-uic
生成的文件。
我在调用Object not defined
或Strato中的任何其他函数调用内部绘制事件时遇到错误self.drawRectangles
?
如果我在paint事件中复制drawRectangles
代码就可以了!
建议?怎么了?
答案 0 :(得分:1)
self
定义中缺少paintEvent
- 我认为centralwidget
是您的UI类的一部分,因此应该可以通过self.centralwidget
访问(因为您继承自你的UI类)。除self
之外,paintEvent
只有一个参数,即事件对象。此外,您不得在之前调用{/ 1}} 来绘制矩形。最后,您需要正确缩进代码 - 但在发布问题时也可能是复制和粘贴问题。尝试
qp.end()
最后,你是should not paint on other widgets来自一个小工具def paintEvent(self, e):
qp = QtGui.QPainter()
qp.begin(self.centralwidget)
print "paint event"
self.drawRectangles(qp)
qp.end()
。相反,子类paintEvent
并覆盖其paint事件。以下sscce有效(删除了所有不相关的代码):
QWidget