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()# ... 省略其他代码 ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Deferred library xxx was not loaded

Deferred 延迟修饰词作用下的文件库尚未完成载入

总结jvm中GC机制(垃圾回收)

前言 本篇博客博主将介绍jvm中的GC机制,坐好板凳发车啦~~ 一.GC相关 1.1回收栈内存 对于虚拟机栈,本地方法栈这部分区域而言,其生命周期与相关线程相关,随线程而生,随线程而灭。并且这三个区域的内存分配与回收具有…

maya安装笔记

目录 linux系统安装 linux系统安装 2020 Ubuntu安装maya2020全过程以及遇到的问题_ubuntu maya安装包-CSDN博客 下载地址: https://up.autodesk.com/2020/MAYA/18BBDBD5-9A15-4095-8D5E-089938EB8E24/Autodesk_Maya_2020_1_ML_Linux_64bit.tgz 参考&#xff1a…

成熟在用的二级医院手术麻醉系统源码 医疗管理系统源码 自主版权

成熟在用的二级医院手术麻醉系统源码 医疗管理系统源码 自主版权 手术麻醉临床信息系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程…

jnpf3.6私有化部署

文件内容 project web > 特别说明:源码、JDK、MySQL、Redis等安装或存放路径禁止包含中文、空格、特殊字符等## 一 技术栈- 主框架:Spring Boot Spring Framework - 持久层框架:MyBatis-Plus - 数据库连接池:Alibaba Druid -…

OpenCV与AI深度学习 | 实战 | YOLOv8自定义数据集训练实现手势识别 (标注+训练+预测 保姆级教程)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:实战 | YOLOv8自定义数据集训练实现手势识别 (标注训练预测 保姆级教程) 0 导 读 本文将手把手教你用YoloV8训练自己的数据集并实现手势识别…

小波包变换(WPT)和OMP实现压缩感知

压缩感知(Compressed Sensing)是一种信号处理理论,它可以从非常少量和不完整的采样中恢复信号,并且在图像处理、医学成像、通信等领域有着广泛的应用。下面是压缩感知算法的一般实现步骤和细节: 1. 压缩感知基本原理 压缩感知的基本思想是,信号通常具有一种稀疏性或者低…

IDEA中连接SQLserver数据库(DataGrip相同连接)

IDEA中连接SQLserver数据库(DataGrip相同连接) 1. 打开IDEA-database组件 2. 新建SQL server连接 3. 填写信息进行连接 填写连接名称,连接主机IP,端口,默认端口1433,数据库用户名密码,默认数据库用户名是sa 第一次连接…

2024最新软件测试【测试理论+ 接口自动化测试】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议, …

智能编码AI软件

目录 通义灵码 通义灵码 基于通义大模型,提供代码智能生成、研发智能问答能力 基于海量研发文档、产品文档、通用研发知识、阿里云的云服务文档和 SDK/OpenAPI 文档等进行问答训练, 为你答疑解惑,助你轻松解决研发问题。个人免费使用&#x…

每日OJ题_回文串dp①_力扣647. 回文子串

目录 力扣647. 回文子串 解析代码 力扣647. 回文子串 647. 回文子串 难度 中等 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同…

Python实现逻辑回归(Logistic Regression)

Python实现逻辑回归(Logistic Regression) 1. 背景介绍 逻辑回归是一种广泛应用于分类问题的统计方法,特别是在二分类问题中。它是一种线性回归的扩展,用于预测目标变量的概率。逻辑回归在许多领域都有广泛的应用,如医疗诊断、金融欺诈检测…

LLMs 可能在 2 年内彻底改变金融行业

在艾伦图灵研究所(The Alan Turing Institute)最新的一项研究中,我们看到了大型语言模型(Large Language Models,LLMs)的一种可能性。它有望通过检测欺诈行为、生成财务洞察以及自动化客户服务,…

Java的编程之旅44——学生信息管理系统

目录 1.MVC设计模式初探 文件结构的搭建 2.Student类用来初始化学生信息 3.主函数里的两个功能 1.调用初始化学生信息的功能 2.输出欢迎界面功能 4.Global类中方法的编写 5.StuPage类,StuCtrl类,StuModel类中方法的编写 1.查询功能 selStu方法的…

想要成为一名合格的软件测试工程师,你得会些啥?

对于很多新入行或者打算入行,成为软件测试工程师的小伙伴来说,刚开始接触这行,不知道自己究竟该学些什么,或者不知道必须掌握哪些知识,才能成为一名合格的测试工程师。 根据笔者观点,如果你能在学习过程中…

每日一题 第六十四期 洛谷 树状数组模板2

【模板】树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 x x x; 求出某一个数的值。 输入格式 第一行包含两个整数 N N N、 M M M,分别表示该数列数字的个数和操作的总…

iOS17 隐私协议适配详解

1. 背景 网上搜了很多文章,总算有点头绪了。其实隐私清单最后做出来就是一个plist文件。找了几个常用三方已经配好的看了看,比着做就好了。 WWDC23 中关于隐私部分的更新(WWDC23 隐私更新官网),其中提到了第三方 SDK 的…

简单而复杂的Python

Python是一种简单&复杂的编程语言。简单的时候可以到极致: print(hello world!)另一方面,Python 也具有许多复杂的语法特性,例如面向对象编程、装饰器、迭代器、生成器等等。这些特性使得 Python 适用于各种不同的编程任务和项目。 当我…

手撸一个简易 Grid 拖拽布局

公众号:程序员白特,欢迎一起交流学习~ 以下文章来源于稀土掘金技术社区 ,作者游仙好梦 最近有个需求需要实现自定义首页布局,需要将屏幕按照 6 列 4 行进行等分成多个格子,然后将组件可拖拽对应格子进行渲染展示。 对比…

实验:基于Red Hat Enterprise Linux系统的创建磁盘和磁盘分区(一)

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 fdisk [参数] [设备] 1. 为虚拟机添加1块大小为3-5G的硬盘nvme,将该硬盘划分1个主分区和两个逻辑分区分别为600MB。 partprobe [选项] [设备] 2. 将主分区格式化为ext4文件系统并挂载到/自己名字命名…