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作用到当前实例中!程序效果如下~在这里插入图片描述

发布了52 篇原创文章 · 获赞 4 · 访问量 2133

猜你喜欢

转载自blog.csdn.net/qq_42191914/article/details/104287422