PyQt5绘图

绘图

PyQt5绘图系统能渲染矢量图像、位图图像和轮廓字体文本。一般会使 用在修改或者提高现有组件的功能,或者创建自己的组件。使用PyQt5 的绘图API进行操作

绘图由 paintEvent() 方法完成,绘图的代码要放在 QPainter 对象 的 begin() 和 end() 方法之间。是低级接口

一、文本涂鸦

从画一些Unicode文本开始,写了一些文本上下居中对齐的俄罗斯Cylliric语言的文字

代码实现:

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


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

    def initUI(self):
        self.text = "Лев Николаевич Толстой\nАнна Каренина"
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Drawing text')
        self.show()

    # 在绘画事件内完成绘画动作
    def paintEvent(self, event):
        # QPainter 是低级的绘画类
        qp = QPainter()
        # 所有的绘画动作都在这个类
        # 的 begin() 和 end() 方法之间完成
        qp.begin(self)
        # 绘画动作都封装 在 drawText() 内部
        self.drawText(event, qp)
        qp.end()

    def drawText(self, event, qp):
        # 为文字绘画定义了笔和字体
        qp.setPen(QColor(168, 34, 3))
        qp.setFont(QFont('Decorative', 10))
        # drawText() 方法在窗口里绘制文本,
        # rect() 方法返回要更新的矩形 区域
        qp.drawText(event.rect(), Qt.AlignCenter, self.text)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

程序预览:

二、点的绘画

点是最简单的绘画了,例子中在窗口里随机的画出了1000个点

代码实现:

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


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

    def initUI(self):
        self.setGeometry(300, 300, 300, 190)
        self.setWindowTitle('Points')
        self.show()

    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        self.d
### PyQt5 绘图区域部件教程 #### 创建绘图区域部件 为了创建一个可以用于绘制图形的部件,在PyQt5中通常会继承`QWidget`类并重写其`paintEvent()`方法。这允许自定义绘画逻辑来实现特定视觉效果。 ```python from PyQt5.QtWidgets import QApplication, QWidget import sys class DrawingArea(QWidget): def __init__(self): super().__init__() def paintEvent(self,event): from PyQt5.QtGui import QPainter painter = QPainter(self) painter.drawText(event.rect(), Qt.AlignCenter, "Drawing Area") ``` 此代码片段展示了如何通过子类化`QWidget`以及覆盖默认行为来构建基本的绘图空间[^1]。 #### 自定义样式表应用到绘图区 对于希望进一步美化或调整绘图区域内元素外观的情况,可以通过设置CSS样式的手段来进行定制: ```css drawing_area { border: 2px solid black; background-color:white; } ``` 上述样式规则能够给定界面上指定名为"drawing_area"的对象添加黑色实线边界,并设定背景颜色为白色。 #### 实现复杂交互功能 当涉及到更复杂的用户互动需求时,比如响应鼠标点击事件完成自由手绘等功能,则需引入额外的方法处理输入信号并与之关联相应的槽函数执行具体操作。 ```python def mousePressEvent(self, event): self.lastPoint = event.pos() def mouseMoveEvent(self, event): painter = QPainter(self.pixmap()) painter.drawLine(self.lastPoint, event.pos()) self.lastPoint = event.pos() self.update() ``` 这些扩展特性使得开发者可以根据实际应用场景灵活设计满足不同业务逻辑要求的应用程序界面组件[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值