[英]PyQt5 update MainWindow after paintEvent
I am pretty new to QT. 我对QT很陌生。 I am trying to paint some rectangles after button click. 单击按钮后,我试图绘制一些矩形。 paintEvent method seems to working but after button click nothing happens I think I need to update mainWindow somehow. paintEvent方法似乎可以正常工作,但是单击按钮后什么也没发生,我想我需要以某种方式更新mainWindow。 Code: 码:
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_())
screen: "test" is printed 屏幕: 打印“测试”
Thanks for any suggestions & improvements. 感谢您的任何建议和改进。
SOLVED 解决了
Problem was in background-color of MainWindow. 问题出在MainWindow的背景色中。 I deleted background-color: rgb(145,145,145);
我删除了background-color: rgb(145,145,145);
and rectangles are up. 和矩形向上。
you can call self.repaint()
to update the display (it will call paintEvent
again) in your pridaj_slide
function : 您可以在pridaj_slide
函数中调用self.repaint()
更新显示(它将再次调用paintEvent
):
def pridaj_slide(self):
self.pridat_slide = True
self.repaint()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.