【pyqt5学习】——Qpainter控件学习(文本、图像、各种图形)

目录

1、作用及应用步骤

2、绘制文本drawText()

3、像素级别绘制点(正弦曲线为例)

4、绘制不同样式的直线 

5、绘制弧形、圆形、扇形、图像等

 6、画刷填充区域QBrush


1、作用及应用步骤

QPainter是一个用于绘制的类,该类可以用于绘制:

文本

各种图形

图像

利用QPainter控件进行绘制得到的内容,在窗口尺寸发生改变的时候,会刷新,重新绘制,但是速度极快,以致于肉眼捕捉不到。

使用步骤一般为:

# 创建类

# 触发类开始

# 设置绘制区域、画笔颜色、笔触大小等参数

# 绘制结束

	# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)# 设置画笔颜色painter.setPen(QColor(100,100,100))# 设置绘制文本字体painter.setFont(QFont("simsun",25))# 设置绘制内容、绘制区域、对齐方式painter.drawText(event.rect(),Qt.AlignCenter,"利用QPainter绘制文本")# 结束绘制painter.end()

2、绘制文本drawText()

输入的是字符串文本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/5/26 12:16
# @Author  : @linlianqin
# @Site    : 
# @File    : QPainter_learn.py
# @Software: PyCharm
# @description:from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QFont,QColor
from PyQt5.QtCore import Qt
import sys# 绘制文本
class drawText(QWidget):def __init__(self):super(drawText, self).__init__()self.setWindowTitle("利用QPainter绘制文本")# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)# 设置画笔颜色painter.setPen(QColor(100,100,100))# 设置绘制文本字体painter.setFont(QFont("simsun",25))# 设置绘制内容、绘制区域、对齐方式painter.drawText(event.rect(),Qt.AlignCenter,"利用QPainter绘制文本")# 结束绘制painter.end()if __name__ == '__main__':app = QApplication(sys.argv)mainWin = drawText()mainWin.show()sys.exit(app.exec_())

 

 上述可以看到,利用QPainter控件绘制的文件,会自适应窗口,一致保持居中的对齐方式。

3、像素级别绘制点(正弦曲线为例)

输入的是像素点坐标

painter.drawPoint(x,y)
# 绘制sin曲线
class drawSin(QWidget):def __init__(self):super(drawSin, self).__init__()self.setWindowTitle("利用QPainter绘制文本")# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)# 设置画笔颜色painter.setPen(QColor(0,100,100))# 设置绘制内容、绘制区域、对齐方式## 窗口大小size = self.size()## 这里是逐点绘制for i in range(1000):x = 100*(-1+2*i/1000)+size.width()/2 ##加上窗口宽度的一半是为了将图像移动到屏幕中心y = -50*math.sin((x-size.width()/2)*math.pi/50)+size.height()/2.0painter.drawPoint(x,y)# 结束绘制painter.end()if __name__ == '__main__':app = QApplication(sys.argv)mainWin = drawSin()mainWin.show()sys.exit(app.exec_())

 

4、绘制不同样式的直线 

输入的是四个数,分别是直线的起点坐标(x1,y1),直线的终点坐标(x2,y2)

 

	# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)## 实线pen = QPen(Qt.red,Qt.SolidLine)painter.setPen(pen)painter.drawLine(20,20,200,20)## 虚线pen.setStyle(Qt.DashLine)painter.setPen(pen)painter.drawLine(20,40,200,40)## 点划线pen.setStyle(Qt.DashDotLine)painter.setPen(pen)painter.drawLine(20,60,200,60)## 自定义pen.setStyle(Qt.CustomDashLine)pen.setDashPattern([1,4,5,4]) # 设置一段线的长度和间隔painter.setPen(pen)painter.drawLine(20, 80, 200, 80)# 结束绘制painter.end()

5、绘制弧形、圆形、扇形、图像等

输入绘制区域和相关的关键点坐标

 

from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QFont,QColor,QPen,QPolygon,QImage
from PyQt5.QtCore import Qt,QRect,QPoint## 绘制弧#### 规定绘制区域rect = QRect(0,10,100,100) ## 左上角点坐标,长宽值#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度painter.drawArc(rect,0,45*16)## 通过绘制弧来绘制圆#### 规定绘制区域rect = QRect(120,10,100,100) ## 左上角点坐标,长宽值#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度painter.setPen(Qt.red)painter.drawArc(rect,0,360*16)## 绘制带线的弧#### 规定绘制区域rect = QRect(0,120,100,100) ## 左上角点坐标,长宽值#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度painter.drawChord(rect,0,45*16)## 绘制椭圆painter.drawEllipse(120,120,150,100)## 绘制扇形painter.drawPie(240,10,100,100,12,130*16) ### 绘制区域、扇## 绘制多边形painter.drawPolygon(QPolygon([QPoint(240,20),QPoint(300,100),QPoint(300,120),QPoint(240,150),QPoint(200,100)]))## 绘制图像image = QImage("1.jpg")painter.drawImage(QRect(10,250,image.width()/3,image.height()/3),image)

 6、画刷填充区域QBrush

 

# 利用画刷填充区域
class QBrushDemo(QWidget):def __init__(self):super(QBrushDemo, self).__init__()self.setWindowTitle("利用画刷填充区域")# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)brush = QBrush(Qt.Dense1Pattern)painter.setBrush(brush)painter.drawRect(10,10,100,100)brush = QBrush(Qt.Dense2Pattern)painter.setBrush(brush)painter.drawRect(10,120,100,100)brush = QBrush(Qt.Dense3Pattern)painter.setBrush(brush)painter.drawRect(120,10,100,100)brush = QBrush(Qt.SolidPattern)painter.setBrush(brush)painter.drawRect(120,120,100,100)painter.end()if __name__ == '__main__':app = QApplication(sys.argv)mainWin = QBrushDemo()mainWin.show()sys.exit(app.exec_())

 

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

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

相关文章

反向代理与Real-IP和X-Forwarded-For(转)

如下图所示,客户端通过Nginx Proxy1 和 Nginx Proxy2 两层反向代理才访问到具体服务Nginx Backend(或如Tomcat服务)。那Nginx Backend如何才能拿到真实客户端IP呢? 接下来我们来看看如何才能获取到客户端真实IP。 场景1  场景1是…

Android studio打开之后 cannot load project: java.lang.NUllpointerException

参考来源:http://bbs.csdn.net/topics/391014393 关闭网络,重新打开Android studio就好了。(但是原因不清楚是为什么?) Internal error. Please report to http://code.google.com/p/android/issuescom.intellij.ide.p…

Val编程-任务编程

不同任务之间可以通过一个标志符来实现互斥事件。 程序代码&#xff1a; Task2 <span style"font-size:12px;">beginwhile truewait(bTaskFlag)cls()gotoxy(1,1)put("这是Task2")gotoxy(1,2)if bTaskFlagput("BFlag:true ")elseput(&…

【pyqt5学习】——拖拽功能(DragDrop)、剪切板(QApplication.clipboard)

目录 1、拖拽功能&#xff08;Drag&Drop&#xff09; 2、剪切板&#xff08;QApplication.clipboard&#xff09; 1、拖拽功能&#xff08;Drag&Drop&#xff09; 选择文本输入框中的文本&#xff0c;移动到下拉框中自动添加步骤&#xff1a; 1、将文本输入框设置为可…

oracle12c之 控制pdb中sga 与 pga 内存使用

Memory Management using Resource Manager Oracle数据库资源管理器(资源管理器)现在可以在多租户容器数据库(CDB)中管理可插入数据库(PDBs)之间的内存使用。这一特性有助于在CDB中维护所有PDBs的性能&#xff0c;确保所有的PDBs都不会占用更多资源&#xff0c;从而导致其他PDB…

[LeetCode] 21. Merge Two Sorted Lists ☆

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 解法&#xff1a; 新建一个链表&#xff0c;依次比较两个链表的头元素&#xff0c;把较小的移到新链表中&#xff0c;直到有…

Val编程-特殊函数使用

Waitendmove()和$Waitendmove()使用心得 这是两个部分&#xff0c;程序运行部分和运动堆栈部分&#xff0c;waitendmove是两个部分进行交互的一个函数。 一般情况下waitendmove()速度会降到0&#xff0c;相当于blend等于off. 代码&#xff1a; begincls()userPage()title("…

Redis的五种数据结构

Redis支持持久化只是它的一件武器&#xff0c;它提供了多达5种数据存储方式&#xff1a; 一 string&#xff08;字符串&#xff09; string是最简单的类型&#xff0c;你可以理解成与Memcached一模一样的类型&#xff0c;一个key对应一个value&#xff0c;其上支持的操作与Mem…

【pyqt5学习】——QDateTimeEdit控件学习

目录 1、同时显示日期时间QDateTime 2、只显示日期QDate 3、只显示时间QTime 4、设置显示的格式setDisplayFormat 5、 QDateTimeEdit常用信号 6、实例 1、同时显示日期时间QDateTime # 同时显示日期时间dateTimeEdit1 QDateTimeEdit()dateTimeEdit2 QDateTimeEdit(QDat…

复选框做成单选效果

function zlClick($id){ var eles document.getElementById($id).children; var srcEle event.srcElement; for(var i0;i<eles.length;i){ if(srcEle.checked){ if(eles[i].value!srcEle.value){ eles[i].checkedfalse; } } } } 技术领域可信计算 其他 申请日 200020012…

013. MVC5过滤器

微软提供了4中过滤器: 1.Action过滤器: 在Action方法执行之前和Action方法执行之后, 会执行此过滤器中的代码. 比如在执行public ActionResult Index()方法之前或之后; 也可以说是在方法执行前或执行后; 接口: IactionFilter 抽象类名: ActionFilterAttribute 添加一个实现…

Val编程-读取汉字

Val编程-读取汉字 Val编程中&#xff0c;对于汉字的读取不是很友好&#xff0c;利用fileget直接读取记事本产生的文件字符串会导致乱码的产生。因为Val只支持使用utf-8进行编码&#xff0c;因此读取的文本需要进行utf-8格式转换。 在GBK中&#xff0c;汉字占两个字节。并且…

【pyqt5学习】——菜单栏(QMenu())、工具栏QToolBar学习

目录 1、菜单栏&#xff08;QMenu()&#xff09;——一般在窗口顶部 1&#xff09;创建菜单栏步骤 2&#xff09;信号与方法 3&#xff09;实操 2、工具栏——一般在菜单栏下方 1&#xff09;创建步骤 2&#xff09;方法与信号 信号&#xff1a; 方法&#xff1a; 3&am…

Java核心技术及面试指南 异常部分的面试题归纳以及答案

4.2.4.1 throw和throws有什么差别&#xff1f;异常&#xff08;Exception&#xff09;和错误&#xff08;Error&#xff09;有什么差别&#xff1f; throw语句表示抛出异常&#xff0c;由方法体内的语句处理。throws语句用在方法声明后面&#xff0c;表示如果抛出异常&#xff…

win7win10 配置wlan热点

win7 & win10 系统自带wlan功能&#xff0c;配置方法如下&#xff1a; 命令行输入: 1. netsh wlan set hostednetwork mode allow ssid "Haha" key12345678 2. netsh wlan start hostednetwork netsh wlan show hostednetwork 转载于:https://www.cnblogs.com/…

java---Socket编程出现的异常种类

.java.net.SocketTimeoutException.这个异常比较常见&#xff0c;socket超时。一般有2个地方会抛出这个&#xff0c;一个是connect的时候&#xff0c;这个超时参数由connect(SocketAddress endpoint,int timeout)中的后者来决定&#xff0c;还有就是setSoTimeout(int timeout)&…

【pyqt5学习】——利用Pyqt5连接打印机(QtPrintSupport、QPrintDialog、QPageSetupDialog)

目录 1、利用QtPrintSupport直接连接打印机——不常用 1&#xff09;基本知识 2&#xff09;完整代码案例 3&#xff09;结果 2、 打印对话框QPrintDialog、打印设置对话框QPageSetupDialog 1&#xff09;弹出打印设置对话框 2&#xff09;弹出打印对话框 注&#xff1a…

Val编程-按键响应模式

由于Val是通过语句gotoxy函数来进行光标移动的&#xff0c;不支持触摸屏与鼠标&#xff0c;因此对于其界面编程有很大的局限。 一般有下面几种模式来进行编程。 1.按键响应模式&#xff08;中断模式&#xff09; 2.轮询模式 一般推荐使用按键响应模式。其原理是对于有按键按下…

[Android]SQLite的使用

Android 数据存储提供了四种存储方式&#xff1a; Shared Preferences 使用键值对&#xff08;Map(key, value)&#xff09;来存储数据 Internal Storage 内部存储&#xff0c;存储在设备内存的 私人数据 External Storage 外部存储&#xff0c;存储在外部设备的 公共数据…

第一百四十五节,JavaScript,同步动画

JavaScript&#xff0c;同步动画 将上一节的&#xff0c;移动透明动画&#xff0c;修改成可以支持同步动画&#xff0c;也就是可以给这个动画方法多个动画任务&#xff0c;让它同时完成 原理&#xff1a; 向方法里添加一个属性&#xff0c;这个属性是一个对象&#xff0c;同步动…