在PyQt中利用QPainter实现UI窗口绘图
在已有的PyQt UI窗口中绘制图形,需要重写窗口的paintEvent方法,并在其中调用QPainter进行绘图操作。
以下示例演示如何在窗口中绘制线条:
import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QPainter, QPen class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(400, 300) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) def paintEvent(self, event): # 注意这里修改了事件参数名称 qp = QPainter() qp.begin(self) self.drawLines(qp) qp.end() def drawLines(self, qp): pen = QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine) qp.setPen(pen) qp.drawLine(120, 120, 120, 210) qp.drawLine(135, 94, 120, 120) qp.drawLine(135, 94, 150, 120) qp.drawLine(150, 120, 150, 210) qp.drawLine(120, 210, 150, 210) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() ui = Ui_Form() ui.setupUi(Form) Form.show() sys.exit(app.exec_())
代码中,paintEvent方法被重写以启动和结束QPainter绘图。drawLines方法使用QPainter绘制线条。通过重写paintEvent并使用QPainter,即可在PyQt UI窗口中绘制自定义图形。 请注意,示例代码已将paintEvent方法的事件参数名称修正为event,这是更标准的写法。