繁体   English   中英

PyQt5在paintEvent之后更新MainWindow

[英]PyQt5 update MainWindow after paintEvent

我对QT很陌生。 单击按钮后,我试图绘制一些矩形。 paintEvent方法似乎可以正常工作,但是单击按钮后什么也没发生,我想我需要以某种方式更新mainWindow。 码:

from PyQt5 import QtCore, QtGui, uic, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QPainter, QColor, QBrush

qtCreatorFile = "gui.ui" # Enter file here.

#This is where you add the file you created earlier. It is loaded using the inbuilt function
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

class MyApp(QtWidgets.QMainWindow):

    pridat_slide = False

    def __init__(self):
        super(MyApp, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pridaj_slide.clicked.connect(self.pridaj_slide)


    def pridaj_slide(self):
        self.pridat_slide = True

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

    def drawRectangles(self, qp):
        if self.pridat_slide:
            print ("test");

            qp.setBrush(QColor(200, 0, 0))
            qp.drawRect(10, 15, 90, 60)

            qp.setBrush(QColor(255, 80, 0, 160))
            qp.drawRect(130, 15, 90, 60)

            qp.setBrush(QColor(25, 0, 90, 200))
            qp.drawRect(250, 15, 90, 60)
            self.update()
            self.pridat_slide = False

if __name__ == "__main__":
    try:
        app = QtWidgets.QApplication(sys.argv)
        window = MyApp()
        window.show()
        sys.exit(app.exec_())

屏幕: 打印“测试”

感谢您的任何建议和改进。

解决了

问题出在MainWindow的背景色中。 我删除了background-color: rgb(145,145,145); 和矩形向上。

您可以在pridaj_slide函数中调用self.repaint()更新显示(它将再次调用paintEvent ):

def pridaj_slide(self):
    self.pridat_slide = True
    self.repaint()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM