甚至不能调用油漆内的函数

2024-06-28 11:09:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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生成的文件。 调用self.drawRectangles或Strato中调用inside paint event的任何其他函数时出现错误Object not defined? 如果我在paint事件中复制drawRectangles代码,它就会工作!你知道吗

建议?怎么了?你知道吗


Tags: importselfdefsyswidthstartmaxcolor
1条回答
网友
1楼 · 发布于 2024-06-28 11:09:54

paintEvent定义中缺少self,我假设centralwidget是UI类的一部分,因此应该可以通过self.centralwidget访问它(因为您是从UI类继承的)。除了selfpaintEvent只有一个参数,事件对象。另外,在绘制矩形之前,不能调用qp.end()。最后,您需要正确地缩进您的代码-但在发布问题时,这也可能是复制和粘贴问题。试试看

def paintEvent(self, e):
    qp = QtGui.QPainter()
    qp.begin(self.centralwidget)
    print "paint event"
    self.drawRectangles(qp)
    qp.end()

最后,您可以从一个小部件的paintEventshould not paint on other widgets。相反,子类QWidget并覆盖其绘制事件。以下sscce工作(删除所有不相关的代码):

#!/usr/bin/python

import sys
from PySide import QtGui, QtCore

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 PaintWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(PaintWidget, self).__init__(parent)

    def paintEvent(self, e):
        qp = QtGui.QPainter(self)
        print("paint event")
        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)

class Strato(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(Strato, self).__init__(parent)
        self.centralwidget = PaintWidget(self)
        self.setCentralWidget(self.centralwidget)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = Strato()
    window.show()
    sys.exit(app.exec_())

相关问题 更多 >