pyqt5使用painEvent事件来实现画图,这里记录一下使用方法。
代码如下:
from PyQt5 import QtWidgets,QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QWidget
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(629, 370)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(20, 20, 93, 28))
self.pushButton.setObjectName("pushButton")
self.widget = QtWidgets.QWidget(Form)
self.widget.setGeometry(QtCore.QRect(30, 80, 541, 241))
self.widget.setObjectName("widget")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "PushButton"))
class MyWidget(QWidget):
def __init__(self,parent=None):
super(MyWidget, self).__init__(parent)
self.resize(600,600)
def paintEvent(self, PaintEvent) -> None:
painter = QPainter(self) # 创建绘图对象
# painter.begin(self)
painter.setPen(Qt.red) # 设置画笔
painter.drawEllipse(80, 10, 50, 30) # 绘制一个椭圆
painter.drawRect(180, 10, 50, 30) # 绘制一个矩形
painter.drawLine(80, 70, 200, 70) # 绘制直线
painter.drawText(50, 100, "岂能尽如人意,但求无愧我心。")
# painter.end()
class Main:
def __init__(self):
app = QApplication(sys.argv)
self.mainWindow = QMainWindow()
self.form = Ui_Form()
self.form.setupUi(self.mainWindow)
self.form.pushButton.clicked.connect(self.draw)
#如果不传入parent,则在form上绘画
# self.w=MyWidget()
# self.w.setParent(self.mainWindow)
#传入parent,则在parent上绘画
self.w = MyWidget(self.form.widget)
self.mainWindow.show()
sys.exit(app.exec_())
def draw(self):
self.w.update()
if __name__ == "__main__":
Main()