Python PaintEvent触发了我的代码几次

Python PaintEvent触发了我的代码几次,python,python-3.x,pyqt,pyqt4,paintevent,Python,Python 3.x,Pyqt,Pyqt4,Paintevent,我不明白为什么PaintEvent会执行我的代码三次以上。。。为什么和在哪里它被初始化了这么多次?真的要重画这么多次吗?为什么 def dispTabs(self): self.w = MyPopup1() self.ui.tabWidget.addTab(self.w, 'Test') class MyPopup1(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWid

我不明白为什么PaintEvent会执行我的代码三次以上。。。为什么和在哪里它被初始化了这么多次?真的要重画这么多次吗?为什么

def dispTabs(self):         
    self.w = MyPopup1()
    self.ui.tabWidget.addTab(self.w, 'Test')


class MyPopup1(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self)   
        print 'ok'

    def paintEvent(self, event): 
        qp = QtGui.QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):
        print 'ok 2'
        color = QtGui.QColor(0, 0, 0)
        color.setNamedColor('#d4d4d4')
        qp.setPen(color)

        qp.setBrush(QtGui.QColor(200, 0, 0))
        qp.drawRect(10, 15, 90, 60)
输出:

ok
ok2
ok2
ok2

稍后可能会添加更多“ok2”…

每次需要重新绘制GUI时都会调用paintEvent方法,并且会多次调用该方法,例如,当您第一次显示小部件时,当您移动小部件时,当您将鼠标悬停在小部件上时,等等。XEvent方法不应直接调用,而是由Qt处理的事件调用,也就是说,Qt决定何时需要调用它,在这种情况下,Qt分析何时需要重新绘制。

那么,当一次调用my script paintEvent同时触发三次时,这是应用程序的正常行为吗?这真的有可能,即使是一次?我不需要以某种方式检查它并尝试优化?哈,我花了这么多时间来寻找我的错误,但它不是错误…@VadymHoncharuk这是正常的行为,那部分已经优化了,你不能改变这个行为,你的代码是正确的