pyqt5讲解5:窗口绘图类控件QPainter,QPen,QBrush,QPixmap
1、QPainter
常用方法
方法 | 描述 |
---|---|
begin() | 开始在目标设备上绘制 |
drawArc() | 在起始角度和最终角度之间画弧 |
drawEliipse() | 在一个矩形内画一个椭圆 |
drawLine(int x1,int y1,int x2,int y2) | 绘制一条指定了端点坐标的直线,并且指定当前画笔位置为(x2,y2) |
drawPixmap() | 从图像文件中提取 Pixmap 并将其显示在指定位置 |
drawPolygon() | 使用坐标数组绘制多边形 |
drawRect(int x,int y,int w,int h) | 以给定的宽度和高度从左上角坐标(x,y)开始绘制一个矩形 |
drawText() | 显示给定坐标处的文字 |
fillRext() | 使用 QColor 参数填充矩形 |
setBrush() | 设置画笔风格 |
setPen() | 设置用于绘制的笔的颜色、大小和样式 |
setpen可选参数
参数 | 描述 |
---|---|
Qt.NoPen | 没有线 |
Qt.SolidLine | 一条简单的线 |
Qt.DashLine | 由一些像素分隔的短线 |
Qt.DotLine | 由一些像素分隔得点 |
Qt.DashDotLine | 轮流交替的点和短线 |
Qt.DashDotDotLine | 一条短线、两个点 |
Qt.MPenStyle | 画笔风格的掩码 |
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date : 2020/8/20import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *class Drawing(QWidget):def __init__(self, parent=None):super(Drawing, self).__init__(parent)self.setWindowTitle("在窗口中绘制文字")self.setWindowIcon(QIcon("head.png"))self.resize(300, 200)self.text = "你好呀,总裁余"def paintEvent(self, event):painter = QPainter()painter.begin(self)# 自定义绘制方法self.draw_text(event, painter)painter.end()def draw_text(self, event, qp):# 设置画笔颜色qp.setPen(QColor(168, 34, 3))# 设置字体qp.setFont(QFont('SimSun', 20))# 绘制文字qp.drawText(event.rect(), Qt.AlignCenter, self.text)
if __name__ == "__main__":app = QApplication(sys.argv)demo = Drawing()demo.show()sys.exit(app.exec_())
解释:
首先定义文字
self.text = “你好呀,总裁余”
定义绘制事件
def paintEvent(self, event):
自定义绘制方法
def draw_text(self, event, qp):
绘制点线
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date : 2020/8/20import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qtclass Drawing(QWidget):def __init__(self, parent=None):super(Drawing, self).__init__(parent)self.resize(300, 200)self.setWindowTitle("在窗口中画点")self.setWindowIcon(QIcon("limi.jpg"))def paintEvent(self, event):# 初始化绘图工具qp = QPainter()qp.begin(self)# 自定义画点方法self.drawPoints(qp)qp.end()def drawPoints(self, qp):qp.setPen(Qt.red)size = self.size()#判断当前窗口大小for i in range(1000):# 绘制正弦图形,周期 [-1000,1000]x = 100 * (- 1 + 2.0 * i / 1000) + size.width() / 2.0y = -50 * math.sin((x - size.width() / 2.0) * math.pi / 50) + size.height() / 2.0qp.drawPoint(x, y)if __name__ == "__main__":app = QApplication(sys.argv)win = Drawing()win.show()sys.exit(app.exec_())
2、QPen
QPen(钢笔)是基本图形对象,用于绘制直线、曲线或者给轮廓画出矩形、椭圆形、多边形以及其他形状等
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt class Drawing(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self): self.setGeometry(300, 300, 280, 270)self.setWindowTitle('钢笔样式例子') 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)demo = Drawing()demo.show()sys.exit(app.exec_())
3、QBrush
QBrush(画刷),用于填充如矩形、椭圆形或多边形等形状。
QBrush 有三种类型:预定义、过渡和纹理图案。
# -*- coding: utf-8 -*-"""【简介】绘图中QBrush 的例子 ,绘制九个不同样式的矩形。"""import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt class Drawing(QWidget): def __init__(self):super().__init__() self.initUI()def initUI(self): self.setGeometry(300, 300, 365, 280)self.setWindowTitle('画刷例子') self.show()def paintEvent(self, e): qp = QPainter()qp.begin(self)self.drawLines(qp)qp.end()def drawLines(self, qp): brush = QBrush(Qt.SolidPattern)qp.setBrush(brush)qp.drawRect(10, 15, 90, 60)brush = QBrush(Qt.Dense1Pattern)qp.setBrush(brush)qp.drawRect(130, 15, 90, 60)brush = QBrush(Qt.Dense2Pattern)qp.setBrush(brush)qp.drawRect(250, 15, 90, 60)brush = QBrush(Qt.Dense3Pattern)qp.setBrush(brush)qp.drawRect(10, 105, 90, 60)brush = QBrush(Qt.DiagCrossPattern)qp.setBrush(brush)qp.drawRect(10, 105, 90, 60)brush = QBrush(Qt.Dense5Pattern)qp.setBrush(brush)qp.drawRect(130, 105, 90, 60)brush = QBrush(Qt.Dense6Pattern)qp.setBrush(brush)qp.drawRect(250, 105, 90, 60)brush = QBrush(Qt.HorPattern)qp.setBrush(brush)qp.drawRect(10, 195, 90, 60)brush = QBrush(Qt.VerPattern)qp.setBrush(brush)qp.drawRect(130, 195, 90, 60)brush = QBrush(Qt.BDiagPattern)qp.setBrush(brush)qp.drawRect(250, 195, 90, 60)if __name__ == '__main__':app = QApplication(sys.argv)demo = Drawing()demo.show()sys.exit(app.exec_())
4、QPixmap
QPixmap 类用于绘图设备的图像显示,可作为一个 QPaintDevice 对象,也可以加载到一个控件中。
QPixmap 可以读取的图像文件类型有:BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM 等。
QPixmap 类的常用方法如下:
方法 | 描述 |
---|---|
copy() | 从 QRect 对象复制到 QPixmap 对象 |
fromIamge() | 将 QImage 对象转换为 QPixmap 对象 |
grabWidget() | 从给定的窗口小控件创建一个像素图 |
grabWindow() | 在窗口中创建数据的像素图 |
load() | 加载图像文件作为 QPixmap 对象 |
save() | 将 QPixmap 对象保存为文件 |
toImage() | 将 QPixmap 对象转换为 QImage 对象 |
# -*- coding: utf-8 -*-'''【简介】PyQt5中 QPixmap 例子'''import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *if __name__ == '__main__':app = QApplication(sys.argv)win = QWidget()lab1 = QLabel()lab1.setPixmap(QPixmap("D:\机器学习\学习草稿\duoren.jpg"))vbox=QVBoxLayout()vbox.addWidget(lab1)win.setLayout(vbox)win.setWindowTitle("QPixmap 例子")win.show()sys.exit(app.exec_())
这篇博文内容来源于书籍《pyqt5快速开发与实战》
我只是记录下有用的信息,方便以后复习查找。
不然学的东西又忘啦。
电气专业的计算机萌新,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。
pyqt5讲解5:窗口绘图类控件QPainter,QPen,QBrush,QPixmap相关推荐
- 从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap
从零开始学Pyqt5之[控件介绍](15):绘图类控件QPainter.QPen.QBrush.QPixMap QPainter控件 QPainter控件的作用 QPainter控件常用方法 QPai ...
- 在主窗口中增加绘图类控件时(以QPainter为例)时不显示内容的问题(不应该加addStretch)
问题引出 假如我要实现以下GUI,包含一个主窗口,主窗口内又包含1个绘图类控件(QPainter中的QdrawText)和1个 单行文本框控件(QLineEdit). 期望效果图 开始实现的代码为: ...
- 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox
pyqt5中常用的按钮类控件有QPushButton.QRadioButton.QCheckBox.QToolButton等.这些按钮类的基类都是QAbstracButton类.所以这些类有部分方法是 ...
- PyQt5快速开发与实战 4.5 按钮类控件 and 4.6 QComboBox(下拉列表框)
PyQt5快速开发与实战 文章目录 PyQt5快速开发与实战 4. 第4章 PyQt5 基本窗口控件 4.5 按钮类控件 4.5.1 QAbstractButton 4.5.2 QPushButton ...
- windows常见窗口样式和控件风格以及类样式
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...
- qt整个窗口上绘制矩形与在窗口的子控件上绘制矩形
引言 创建一个基于QDialog的项目,自动生成ui文件,此时再添加新文件,创建一个基于QWidget的ui类,此类具有自定义标题栏,让该自定义类显示在窗口Dialog上,一开始具有红色的边框线,且四 ...
- 转载几篇别人写的皮肤类控件的技术文章
转载几篇别人写的皮肤类控件的技术文章 原连接:http://blog.sina.com.cn/s/blog_4c3538470100ezhu.html 实现控件的透明背景 很多情况下,我们需要控件 的 ...
- Adapter类控件使用之ExpandableList(可折叠式列表)的基本使用
(一)概述 本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是 ListView的子类, 在ListView的基础上它把应用中的列表项分为几组,每组里又可包 ...
- Windows常见窗口样式和控件风格
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...
最新文章
- win7隐藏linux分区工具,传授win7系统用组策略把分区隐藏掉的处理对策
- C++读写txt文件方式以及基于opencv的Mat数据类型读写txt文件
- 最优化导论(part1)--求解原问题的对偶问题
- .NET 云原生架构师训练营(系统架构)--学习笔记
- 201506230818_《JavaScript权威指南(第六版)——callee和caller、对象属性用作实参、自定义函数属性》(P175-180)...
- 【转载保存】匿名内部类中this的使用
- 五年级计算机教材内容,五年级计算机教学计划
- java代码逆向工程生成uml
- winform自定义分页控件
- 利用cad计算型材的弹性模量_型材截面特性的CAD计算方法
- ajax 解决csrf的3种方法,input标签的文件上传
- Atitit 返回http500返回码,以及自定义返回提示 目录 1. 可以看到从php发送http响应代码的三种方法:	1 1.1. Header(HTTP/1.1 404 Not Found
- appcan外部网页css,Appcan开发之页面布局与CSS排版
- AutoCAD如何设置A0A1图纸
- 正在解析主机/打开网页慢,有可能是你的虚拟机网卡的问题
- 怎样用python提取英文字母_python如何获取一次获取26个英文字母
- 验证码识别论文总结---外文篇
- 扩展了 jquery 的插件 easy drag (转载 木野狐)
- 3·15特辑:“伪智能”厂商能有什么坏心思,无非是想骗钱罢了
- ZigBee 设置信道、PANID、发射功率
热门文章
- 「中间件系列二」redis缓存
- LeetCode 14 最长公共前缀
- LeetCode 13 罗马数字转整数
- 4g无线网卡搭建服务器,我买了一个4G无线网卡,可不知道怎么在手机里使用?
- 计算机粘贴功能不能用了,电脑复制粘贴不能用了【解决办法】
- 单片机和java_java和单片机哪个难学?
- 结构体数组实现的简易学生信息管理系统
- redis学习(五) redis实现购物车
- android异步线程利用Handler将消息发送至UI线程
- XCTF(攻防世界)—进阶web题Write Up(一)