Python PyQt5——QPainter 绘图用法与代码示例

本文介绍如何使用PyQt5中的QPainter类进行图形绘制,包括设置颜色、字体、绘制文本、直线、矩形、椭圆及多边形等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QPainter是Qt框架中的一个类,用于在Qt基于应用程序中进行绘图和绘制图形。

使用QPainter,可以绘制各种形状,如线条、矩形、椭圆和多边形,以及文本和图像。它提供了用于指定颜色、画笔、笔刷和变换的方法。

QPainter

在 PyQt5 中,绘图操作通常在 QWidget 的 paintEvent() 方法中完成。所有的绘图函数调用都必须位于 QPainter.begin() 和 QPainter.end() 之间。

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import Qt

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('我的窗口')
        self.setGeometry(50, 50, 200, 150)

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        # 绘图操作...
        painter.end()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec_())

通过设置 QWidget 的调色板(palette),可以用 QPainter 来改变背景颜色。

from PyQt5.QtGui import QColor, QFont
from PyQt5.QtCore import Qt

class MyWidget(QWidget):
    # ... 省略其他代码 ...

    def initUI(self):
        # ... 省略其他代码 ...
        self.setAutoFillBackground(True)
        palette = self.palette()
        palette.setColor(self.backgroundRole(), Qt.white)  # 或者 Qt.black
        self.setPalette(palette)

    # ... 省略其他代码 ...

绘制文本

QPainter 的 drawText() 函数允许指定文本的位置和对齐方式。可以通过设置画笔(QPainter.setPen())和字体(QPainter.setFont())来自定义文本的外观。

from PyQt5.QtGui import QColor, QFont, QPainter
from PyQt5.QtCore import Qt, QPoint, QRect

class MyWidget(QWidget):
    # ... 省略其他代码 ...

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setPen(QColor(0, 0, 255))
        painter.setFont(QFont('Arial', 20))
        painter.drawText(QPoint(10, 30), 'PyQt5')
        # ... 省略其他代码 ...
        painter.end()

绘制直线

from PyQt5.QtGui import QPen

class MyWidget(QWidget):
    # ... 省略其他代码 ...

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        pen = QPen(Qt.black, 2, Qt.SolidLine)
        painter.setPen(pen)
        painter.drawLine(20, 40, 180, 40)
        # ... 省略其他代码 ...
        painter.end()

绘制矩形

class MyWidget(QWidget):
    # ... 省略其他代码 ...

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setPen(Qt.black)
        painter.drawRect(QRect(10, 10, 80, 80))
        # ... 省略其他代码 ...
        painter.end()

绘制椭圆和圆

class MyWidget(QWidget):
    # ... 省略其他代码 ...

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setPen(Qt.black)
        painter.drawEllipse(QRect(10, 30, 40, 80))
        # ... 省略其他代码 ...
        painter.end()

绘制圆弧和圆形

class MyWidget(QWidget):
    # ... 省略其他代码 ...

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setPen(Qt.black)
        painter.drawArc(QRect(20, 20, 50, 50), 0, 90*16)  # 90度圆弧
        # ... 省略其他代码 ...
        painter.end()

绘制多边形:

from PyQt5.QtCore import QPoint

class MyWidget(QWidget):
    # ... 省略其他代码 ...

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setPen(Qt.black)
        p1 = QPoint(40, 40)
        p2 = QPoint(60, 20)
        p3 = QPoint(80, 40)
        p4 = QPoint(80, 80)
        p5 = QPoint(40, 80)
        painter.drawPolygon([p1, p2, p3, p4, p5])
        # ... 省略其他代码 ...
        painter.end()

绘制图像

QPainter 还支持在 QWidget 上绘制图像。可以使用 QImage 或 QPixmap 来加载和显示图像。

from PyQt5.QtGui import QImage

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # ... 省略其他代码 ...
        self.qimage = QImage('lena.jpg')

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.drawImage(QRect(10, 10, 120, 120), self.qimage)
        painter.end()

# ... 省略其他代码 ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值