当前位置: 首页 > news >正文

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 Qtclass 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 Qtclass MyWidget(QWidget):# ... 省略其他代码 ...def initUI(self):# ... 省略其他代码 ...self.setAutoFillBackground(True)palette = self.palette()palette.setColor(self.backgroundRole(), Qt.white)  # 或者 Qt.blackself.setPalette(palette)# ... 省略其他代码 ...

绘制文本

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

from PyQt5.QtGui import QColor, QFont, QPainter
from PyQt5.QtCore import Qt, QPoint, QRectclass 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 QPenclass 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 QPointclass 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 QImageclass 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()# ... 省略其他代码 ...

相关文章:

  • 【Web】NSSCTF Round#20 Basic 两道0解题的赛后谈
  • 39.基于SpringBoot + Vue实现的前后端分离-无人智慧超市管理系统(项目 + 论文PPT)
  • CSS 实现伸缩导航仪表板侧边栏菜单
  • PHP教程_如何向PHP5中的数组(Array)插入元素
  • 前端跨页面通信方案介绍
  • JavaScript 删除数组中指定元素的6种方法
  • C语言第三十九弹---预处理(上)
  • 【QT5-程序控制电源-串口通讯-<低成本>-程控电源方案-上位机-基础样例【3】】
  • 面试题 之 vue
  • 数据库-root密码丢失的重置方案(win11环境)
  • andv vue 实现多张图片上传
  • 史上最强 PyTorch 2.2 GPU 版最新安装教程
  • golang和Java的简单介绍和对比
  • cesium 加载gltf并实时改变位置 CallbackProperty方式
  • Mybatis 之 useGeneratedKeys
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • ERLANG 网工修炼笔记 ---- UDP
  • gcc介绍及安装
  • Joomla 2.x, 3.x useful code cheatsheet
  • Python 基础起步 (十) 什么叫函数?
  • python 装饰器(一)
  • Python十分钟制作属于你自己的个性logo
  • Python学习之路13-记分
  • Spring声明式事务管理之一:五大属性分析
  • swift基础之_对象 实例方法 对象方法。
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 基于web的全景—— Pannellum小试
  • 扑朔迷离的属性和特性【彻底弄清】
  • 设计模式 开闭原则
  • 设计模式(12)迭代器模式(讲解+应用)
  • 思否第一天
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #图像处理
  • (1)bark-ml
  • (C语言)逆序输出字符串
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十) 初识 Docker file
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)图像的%2线性拉伸
  • (一)Java算法:二分查找
  • (一)SpringBoot3---尚硅谷总结
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)原始图像数据和PDF中的图像数据
  • .NET Micro Framework 4.2 beta 源码探析
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • /run/containerd/containerd.sock connect: connection refused
  • @Autowired和@Resource的区别
  • @SpringBootApplication 包含的三个注解及其含义
  • [20171113]修改表结构删除列相关问题4.txt
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [CISCN2019 华东北赛区]Web2
  • [CLR via C#]11. 事件