PyQt5常用功能四

⽂本涂鸦

写⼀些⽂本上下居中对齐的俄罗斯Cylliric语⾔的⽂字

import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qtclass 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 是低级的绘画类。所有的绘画动作都在这个类的 begin() 和 end() ⽅法之间完成# 绘画动作都封装在 drawText() 内部qp = QPainter()qp.begin(self)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()app.exec_()

在这里插入图片描述

注:
当发生以下情况时会产生绘制事件并调用paintEvent()函数:

  • 在窗口部件第一次显示时,系统会自动产生一个绘图事件,从而强制绘制这个窗口部件。(也 就是说程序开启时就直接触发了)
  • 当重新调整窗口部件的大小时,系统也会产生一个绘制事件。
  • 当窗口部件被其他窗口部件遮挡,然后又再次显示出来的时候,就会对那些隐藏的区域产生一 个绘制事件

同时可以调⽤QWidget::update()或者QWidget::repaint()来强制产⽣⼀个绘制事件。

⼆者的区别是:
repaint()函数会强制产⽣⼀个即时的重绘事件,⽽update()函数只是在Qt下⼀次处理事件时才调
⽤⼀次绘制事件。如果多次调⽤update(),Qt会把连续多次的绘制事件压缩成⼀个单⼀的绘制事件,
这样可避免闪烁现象。

点的绘画

点是最简单的绘画

from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import Qt
import sys, randomclass 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.drawPoints(qp)qp.end()  # end就不⽤加selfdef drawPoints(self, qp):# 设置笔的颜⾊为红⾊qp.setPen(Qt.red)# 每次更改窗⼜⼤⼩,都会产⽣绘画事件,从 size() ⽅法⾥获得当前窗⼜的⼤⼩,# 然后把产⽣的点随机的分配到窗⼜的所有位置上size = self.size()for i in range(1000):x = random.randint(1, size.width() - 1)y = random.randint(1, size.height() - 1)qp.drawPoint(x, y)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()app.exec_()

在这里插入图片描述

颜色

颜⾊是⼀个物体显⽰的RGB的混合⾊。RBG值的范围是0~255。我们有很多⽅式去定义⼀个颜⾊,
最常见的⽅式就是RGB和16进制表⽰法,也可以使⽤RGBA,增加了⼀个透明度的选项,透明度值
的范围是0~1,0代表完全透明

from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QBrush
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 350, 100)self.setWindowTitle('Colours')self.show()def paintEvent(self, e):  # 程序启动⾃动调⽤qp = QPainter()qp.begin(self)self.drawRectangles(qp)qp.end()def drawRectangles(self, qp):col = QColor(0, 0, 0)# 设置边框的颜⾊col.setNamedColor('#d4d4d4')qp.setPen(col)qp.setBrush(QColor(200, 0, 0))# drawRect() 有四个参数,分别是矩形的x、y、w、hqp.drawRect(10, 15, 90, 60)qp.setBrush(QColor(255, 80, 0, 160))qp.drawRect(130, 15, 90, 60)qp.setBrush(QColor(25, 0, 90, 200))qp.drawRect(250, 15, 90, 60)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()app.exec_()

在这里插入图片描述

QPen

QPen 是基本的绘画对象,能⽤来画直线、曲线、矩形框、椭圆、多边形和其他形状

⽤不同的笔画直线

from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 280, 270)self.setWindowTitle('Pen styles')self.show()def paintEvent(self, e):  # 程序启动⾃动调⽤qp = QPainter()qp.begin(self)self.drawLines(qp)qp.end()def drawLines(self, qp):pen = QPen(Qt.black, 2, Qt.SolidLine)  # 先设置笔的样式qp.setPen(pen)  # 有种插上笔芯的感觉qp.drawLine(20, 40, 250, 40)  # 前两个坐标起点 后两个坐标终点pen.setStyle(Qt.DashLine)qp.setPen(pen)qp.drawLine(20, 80, 250, 80)pen.setStyle(Qt.DashDotLine)qp.setPen(pen)qp.drawLine(20, 120, 250, 120)pen.setStyle(Qt.DotLine)qp.setPen(pen)qp.drawLine(20, 160, 250, 160)pen.setStyle(Qt.DashDotDotLine)qp.setPen(pen)qp.drawLine(20, 200, 250, 200)pen.setStyle(Qt.CustomDashLine)pen.setDashPattern([1, 4, 5, 4])qp.setPen(pen)qp.drawLine(20, 240, 250, 240)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()app.exec_()

PyQt5有五个预定义的笔,另外⼀个笔的样式是⾃定义的
在这里插入图片描述

QBrush

QBrush 也是图像的⼀个基本元素。是⽤来填充⼀些物体的背景图⽤的,⽐如矩形,椭圆,多边形
等。
有三种类型:

  • 预定义
  • 渐变
  • 纹理
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QBrush
from PyQt5.QtCore import Qt
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 355, 280)self.setWindowTitle('Brushes')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawBrushes(qp)qp.end()def drawBrushes(self, qp):brush = QBrush(Qt.SolidPattern)qp.setBrush(brush)qp.drawRect(10, 15, 90, 60)  # 这⾥后两位貌似是⻓和⾼brush.setStyle(Qt.Dense1Pattern)qp.setBrush(brush)qp.drawRect(130, 15, 90, 60)brush.setStyle(Qt.Dense2Pattern)qp.setBrush(brush)qp.drawRect(250, 15, 90, 60)brush.setStyle(Qt.DiagCrossPattern)qp.setBrush(brush)qp.drawRect(10, 105, 90, 60)brush.setStyle(Qt.Dense5Pattern)qp.setBrush(brush)qp.drawRect(130, 105, 90, 60)brush.setStyle(Qt.Dense6Pattern)qp.setBrush(brush)qp.drawRect(250, 105, 90, 60)brush.setStyle(Qt.HorPattern)qp.setBrush(brush)qp.drawRect(10, 195, 90, 60)brush.setStyle(Qt.VerPattern)qp.setBrush(brush)qp.drawRect(130, 195, 90, 60)brush.setStyle(Qt.BDiagPattern)qp.setBrush(brush)qp.drawRect(250, 195, 90, 60)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()app.exec_()

创建了⼀个笔刷对象,添加笔刷样式
在这里插入图片描述

贝塞尔曲线

噩梦可以使⽤PyQt5的 QPainterPath 创建贝塞尔曲线。绘画路径是由许多构建图形的对象,具体表
现就是⼀些线的形状,⽐如矩形,椭圆,线和曲线

from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QPainterPath
from PyQt5.QtCore import Qt
import sysclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 380, 250)self.setWindowTitle('Bézier curve')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)qp.setRenderHint(QPainter.Antialiasing)self.drawBezierCurve(qp)qp.end()def drawBezierCurve(self, qp):path = QPainterPath()path.moveTo(30, 30)path.cubicTo(30, 30, 200, 350, 350, 30)qp.drawPath(path)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()app.exec_()

⽤ QPainterPath 路径创建贝塞尔曲线。使⽤ cubicTo() ⽅法⽣成,分别需要三个点:起始点,控
制点和终⽌点
在这里插入图片描述

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

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

相关文章

趋势(一)利用python绘制折线图

趋势(一)利用python绘制折线图 折线图( Line Chart)简介 折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化…

如何查看GB28181流媒体平台LiveGBS中对GB28181实时视频数据统计的负载信息

目录 1、负载信息2、负载信息说明3、会话列表查看 3.1、会话列表4、停止会话5、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负载信息说明 直播:当前推流到平台的实时视频数目回放:当前推流到平台的回…

【无标题】基于情境依赖因果影响的多智能体协作强化学习

、文章探讨了大型语言模型(LLMs),例如GPT-4,是否以及在何种意义上拥有知识。作者认为,这些模型展现了一种称为“工具性知识”的能力,这种知识允许它们根据输入上下文推断任务结构,并在此基础上进…

废水处理(一)——MDPI特刊推荐

特刊征稿 01 期刊名称: Removing Challenging Pollutants from Wastewater: Effective Approaches 截止时间: 摘要提交截止日期:2024年11月30日 投稿截止日期:2025年5月31日 目标及范围: 该主题是分享去除有毒物…

js操作元素的其他操作(4个案例+效果图+代码)

目录 1. 获取元素的位置和大小 案例:获取元素的位置和大小 1.代码 2.效果 2. 获取元素的可视区域 案例:获取元素的可视区域 1.代码 2.效果 3. 元素的滚动操作 案例:元素的滚动操作 1.代码 2.效果 4. 获取鼠标指针位置 案例:时刻获取鼠标位置 1.代码 2.效果 案例:拖动的小球 1.代…

万物智联创未来,第三届OpenHarmony技术大会在上海成功举办 深圳触觉智能参会

​10月12日,以“技术引领筑生态,万物智联创未来”为主题的第三届OpenHarmony技术大会(以下简称“大会”)在上海成功举办。本次大会由OpenHarmony项目群技术指导委员会(TSC)主办,华为、上海交通大…

阿里云物联网自有app创建之初始化SDK

文章目录 一、新建工程,配置gradle,导入.so文件,生成apk二、上传apk,集成安全图片,下载SDK三、SDK的集成四、初始化SDK 最近在研究阿里云自有app,这是自己的心得。 一、新建工程,配置gradle,导入.so文件,生…

Gin框架官方文档详解03:HTML渲染

注:本教程使用工作区方法管理项目,详见第一讲:创建一个简单的Gin应用。 目录 一、简单渲染二、使用不同目录下名称相同的模板三、自定义模板渲染器四、自定义分隔符五、自定义模板函数六、总结 一、简单渲染 首先,以03HTML渲染为…

机器学习与神经网络:诺贝尔物理学奖的新篇章

机器学习与神经网络:诺贝尔物理学奖的新篇章 引言 2024年诺贝尔物理学奖的颁发,无疑是一个历史性的转折点。这一奖项首次授予了在机器学习与神经网络领域做出杰出贡献的科学家,标志着人工智能技术在科学研究中的重要地位得到了前所未有的认…

3.计算机网络_端口号

端口号的由来 运输层的作用: 在计算机网络中,运输层处在用户功能的最底层、通信部分的最高层的位置,也就是说运输层是用户数据和实际网络通信的桥梁。因此运输层屏蔽了网络的实现部分,以协议的方式向用户层提供了接口&#xff…

Matlab绘图总结(进阶)

本文在前文的基础上进一步整理画图方法 MATLAB画动图_CSDN博客 1. 基础图形绘制 1.1 rectangle(矩形,圆形) 在前文中,讲解了如何使用rectangle,rectangle本意是用来画矩形的,其中,Curvature可…

【一起学Rust | 框架篇 | Tauri2.0框架】高级概念之安全特性的权限与能力

文章目录 前言一、开发前准备1. 准备项目2. 需求分析1. 监听系统热键2. 切换窗口无边框3. 切换窗口全屏 二、安装插件三、前端实现功能四、配置权限 前言 当前时间为 2024 年 9 月,距离Tauri 2.0 的 RC 版本发布迄今已近一个月。从 Tauri 官方渠道可以看出&#xf…

CVESearch部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.1.1、下载安装基础组件2.1.1.2、下载安装MongoDB Community Edition 7.0 2.1.2、使用源码安装系统2.1.2.1、安装CVESearch2.1.2.2、填充MongoDB数据库2.1.2.3、填充Redis数据库 2.2、使用方法 3、测…

使用java画一条线。

package p1008;import javax.swing.*; import java.awt.*;public class LineAndTextExample extends JPanel {Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 设置线条粗细Graphics2D g2d (Graphics2D) g;g2d.setStroke(new BasicStroke(5))…

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(基础)

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(基础) 简介适用场景Quartz核心概念Quartz 存储方式Quartz 版本类型引入相关依赖开始集成方式一:内存方式(MEMORY)存储实现定时任务1. 定义任务类2. 定…

Broken pipe异常分析及处理

问题出现:生产上运行的系统业务正常,当在查询数据时,出现后台异常,检查后台日志出现Broken Pipe异常; 如图示: Broken Pipe定义:通常发生在服务器端尝试向已关闭的套接字(客户端/端…

前端面试经验总结1(简历篇)

本文分为3部分,分别为第一部分简历篇,第二部分经典问题篇以及第三部分知识体系篇,都是个人面试经验及同行面试经验总结和整理。 我对于简历的理解是这样的,简历的作用是让看简历的人能够快速、准确地捕捉到有用信息: 你…

大数据存储,搜索智能化的实践分享 | OceanBase 城市交流会精彩回顾

9月21日,“OceanBase 城市交流会”来到了深圳,携手货拉拉大数据技术与产品部,联合举办了“走进货拉拉”的技术交流活动。货拉拉、万家数科、云集、百丽等多家企业的一线技术专家,就大数据存储、AI等热点话题,深入探讨并…

新的一轮前端面试已来临,避坑指南来 get!

最近看到很多人都在投简历,可是很多人对待面试不够认真,只会等待结果,不去努力。所以整理一些懒人面试技巧给大家。 我们说说目前应用面积最广的 Vue,大厂或是高级工程师面试的时候究竟会碰到什么棘手或是难缠的 Vue 的面试题呢&a…

人工智能 | openai chatgpt 大语言模型

简介 OpenAI 一个美国人工智能研究实验室,由非营利组织 OpenAI Inc,和其营利组织子公司 OpenAI LP 所组成。该组织于 2015 年由萨姆阿尔特曼、里德霍夫曼、杰西卡利文斯顿、伊隆马斯克、伊尔亚苏茨克维、沃伊切赫萨伦巴、彼得泰尔等人在旧金山成立&…