PyQt5:QPainter使用注意

官方文档:https://doc.qt.io/qtforpython/PySide2/QtGui/QPainter.html
QPainter是Qt中一个方便的绘图类,下面以“为界面填充背景”为例,说明一下QPainter使用时需要注意的点

先给出完整程序,其中’try/video_1.ui’是提前用designer写好的一个ui文件,'icon/bg_2.jpg’是一张背景图:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter,QPixmap
from PyQt5 import uic

class Winform(QWidget):
    def __init__(self):
        super(Winform, self).__init__()
        self.ui = uic.loadUi('try/video_1.ui', baseinstance=self)

    def paintEvent(self, event):
        print("调用paintEvent成功!")
        painter = QPainter(self)
        painter.drawPixmap(self.rect(), QPixmap('icon/bg_2.jpg'))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Winform()
    form.show()
    sys.exit(app.exec_())


1. 继承QWidget
在这里插入图片描述
  根据上面官方文档的描述,想使用QPainter需要在paintEvent中写入相应功能,即重写该函数。该事件是可以自动触发一次的。我们自然需要对QWidget进行继承,不然是没法触发paintEvent事件的~

class Winform(QWidget):
super(Winform, self).__init__()


2. uic.loadUi
在这里插入图片描述
  使用uic.loadUi函数时,需要指定参数baseinstance=self,正如上面所述,这可以保证ui被创建在当前实例下(而非创建一个新实例),否则,paintEvent是无法触发的

3. painter=QPainter(self)
  类似地,实例化QPainter时也需要指定当前实例“self”,否则虽然paintEvent能被触发,但是不会作用到当前实例上,无法完成paint任务



所以,在使用QPainter时,既需要通过继承和重写来自动触发paintEvent事件,又需要注意将ui和painter作用到当前实例中!程序效果如下~在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5是Python语言的GUI编程工具包,其中包含了QPainter类,可以用来绘制各种图形。下面是一些常见的图形及其绘制方法: 1. 直线 ```python from PyQt5.QtGui import QPainter, QPen from PyQt5.QtCore import Qt pen = QPen(Qt.black, 2, Qt.SolidLine) painter = QPainter() painter.begin(self) painter.setPen(pen) painter.drawLine(0, 0, 100, 100) painter.end() ``` 2. 矩形 ```python from PyQt5.QtGui import QPainter, QPen, QBrush from PyQt5.QtCore import Qt pen = QPen(Qt.black, 2, Qt.SolidLine) brush = QBrush(Qt.gray) painter = QPainter() painter.begin(self) painter.setPen(pen) painter.setBrush(brush) painter.drawRect(0, 0, 100, 100) painter.end() ``` 3. 圆形 ```python from PyQt5.QtGui import QPainter, QPen, QBrush from PyQt5.QtCore import Qt pen = QPen(Qt.black, 2, Qt.SolidLine) brush = QBrush(Qt.gray) painter = QPainter() painter.begin(self) painter.setPen(pen) painter.setBrush(brush) painter.drawEllipse(0, 0, 100, 100) painter.end() ``` 4. 文字 ```python from PyQt5.QtGui import QPainter, QFont from PyQt5.QtCore import Qt font = QFont("Arial", 16) painter = QPainter() painter.begin(self) painter.setFont(font) painter.drawText(0, 0, "Hello PyQt5") painter.end() ``` 5. 多边形 ```python from PyQt5.QtGui import QPainter, QPen, QBrush from PyQt5.QtCore import Qt, QPoint pen = QPen(Qt.black, 2, Qt.SolidLine) brush = QBrush(Qt.gray) painter = QPainter() painter.begin(self) painter.setPen(pen) painter.setBrush(brush) points = [QPoint(0, 0), QPoint(50, 50), QPoint(100, 0)] painter.drawPolygon(points) painter.end() ``` 以上只是一些常见的图形,QPainter还支持更多的绘制方法,比如曲线、扇形等等,具体可以参考官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值