PyQt5更新后paintEvent主窗口

问题描述:

我对QT很新。 我想按钮单击后画一些矩形。 paintEvent方法似乎工作,但按钮后单击没有任何反应 我想我需要更新mainWindow莫名其妙。 代码:PyQt5更新后paintEvent主窗口

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_()) 

屏幕:"test" is printed

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

解决

问题是在主窗口的背景色。我删除了background-color: rgb(145,145,145);和矩形都起来了。

你可以打电话self.repaint()更新显示在您的pridaj_slide功能(它会再次调用paintEvent):

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