可以在paint事件中调用一个函数

时间:2014-02-28 08:34:00

标签: python qt pyside

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代码就可以了!

建议?怎么了?

1 个答案:

答案 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