为什么repaint()可以正常工作,而update()不能正常工作?

时间:2019-08-28 09:02:23

标签: python python-3.x macos pyqt5

我是PyQt5的新手,试图研究它的工作原理。我创建了一个窗口,在其上放置一个按钮,将click事件连接到相应的方法。代码很简单-按下按钮时,计数器会增加,新值需要显示在窗口中央。但是,如果我使用self.update()(在某些来源中建议这样做),则仅在调整大小或移动窗口时才刷新窗口,而不是在按下按钮后立即刷新窗口。如果我使用self.repaint(),一切都会很好。您能否解释一下这些方法之间的区别,以及为什么其中一种方法如此奇怪?

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'First Try'
        self.value = 1
        self.startButton = QPushButton('Start', self)
        self.startButton.clicked.connect(self.startPressed)
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(10, 10, 640, 480)
        hbox = QHBoxLayout()
        hbox.addWidget(self.startButton)
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        self.setLayout(vbox)
        self.show()

    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)
        qp.setPen(QColor(168, 34, 3))
        qp.setFont(QFont('Decorative', 30))
        qp.drawText(self.rect(), Qt.AlignCenter, str(self.value))
        qp.end()

    def startPressed(self):
        self.value += 1
        self.update()

0 个答案:

没有答案