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

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()

# ... 省略其他代码 ...
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyQt5Python语言的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
发出的红包

打赏作者

知来者逆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值