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相关推荐

  1. 从零开始学Pyqt5之【控件介绍】(15):绘图类控件QPainter、QPen、QBrush、QPixMap

    从零开始学Pyqt5之[控件介绍](15):绘图类控件QPainter.QPen.QBrush.QPixMap QPainter控件 QPainter控件的作用 QPainter控件常用方法 QPai ...

  2. 在主窗口中增加绘图类控件时(以QPainter为例)时不显示内容的问题(不应该加addStretch)

    问题引出 假如我要实现以下GUI,包含一个主窗口,主窗口内又包含1个绘图类控件(QPainter中的QdrawText)和1个 单行文本框控件(QLineEdit). 期望效果图 开始实现的代码为: ...

  3. 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox

    pyqt5中常用的按钮类控件有QPushButton.QRadioButton.QCheckBox.QToolButton等.这些按钮类的基类都是QAbstracButton类.所以这些类有部分方法是 ...

  4. PyQt5快速开发与实战 4.5 按钮类控件 and 4.6 QComboBox(下拉列表框)

    PyQt5快速开发与实战 文章目录 PyQt5快速开发与实战 4. 第4章 PyQt5 基本窗口控件 4.5 按钮类控件 4.5.1 QAbstractButton 4.5.2 QPushButton ...

  5. windows常见窗口样式和控件风格以及类样式

    Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...

  6. qt整个窗口上绘制矩形与在窗口的子控件上绘制矩形

    引言 创建一个基于QDialog的项目,自动生成ui文件,此时再添加新文件,创建一个基于QWidget的ui类,此类具有自定义标题栏,让该自定义类显示在窗口Dialog上,一开始具有红色的边框线,且四 ...

  7. 转载几篇别人写的皮肤类控件的技术文章

    转载几篇别人写的皮肤类控件的技术文章 原连接:http://blog.sina.com.cn/s/blog_4c3538470100ezhu.html 实现控件的透明背景 很多情况下,我们需要控件 的 ...

  8. Adapter类控件使用之ExpandableList(可折叠式列表)的基本使用

    (一)概述 本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是 ListView的子类, 在ListView的基础上它把应用中的列表项分为几组,每组里又可包 ...

  9. Windows常见窗口样式和控件风格

    Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...

最新文章

  1. win7隐藏linux分区工具,传授win7系统用组策略把分区隐藏掉的处理对策
  2. C++读写txt文件方式以及基于opencv的Mat数据类型读写txt文件
  3. 最优化导论(part1)--求解原问题的对偶问题
  4. .NET 云原生架构师训练营(系统架构)--学习笔记
  5. 201506230818_《JavaScript权威指南(第六版)——callee和caller、对象属性用作实参、自定义函数属性》(P175-180)...
  6. 【转载保存】匿名内部类中this的使用
  7. 五年级计算机教材内容,五年级计算机教学计划
  8. java代码逆向工程生成uml
  9. winform自定义分页控件
  10. 利用cad计算型材的弹性模量_型材截面特性的CAD计算方法
  11. ajax 解决csrf的3种方法,input标签的文件上传
  12. Atitit 返回http500返回码,以及自定义返回提示 目录 1. 可以看到从php发送http响应代码的三种方法: 1 1.1. Header(HTTP/1.1 404 Not Found
  13. appcan外部网页css,Appcan开发之页面布局与CSS排版
  14. AutoCAD如何设置A0A1图纸
  15. 正在解析主机/打开网页慢,有可能是你的虚拟机网卡的问题
  16. 怎样用python提取英文字母_python如何获取一次获取26个英文字母
  17. 验证码识别论文总结---外文篇
  18. 扩展了 jquery 的插件 easy drag (转载 木野狐)
  19. 3·15特辑:“伪智能”厂商能有什么坏心思,无非是想骗钱罢了
  20. ZigBee 设置信道、PANID、发射功率

热门文章

  1. 「中间件系列二」redis缓存
  2. LeetCode 14 最长公共前缀
  3. LeetCode 13 罗马数字转整数
  4. 4g无线网卡搭建服务器,我买了一个4G无线网卡,可不知道怎么在手机里使用?
  5. 计算机粘贴功能不能用了,电脑复制粘贴不能用了【解决办法】
  6. 单片机和java_java和单片机哪个难学?
  7. 结构体数组实现的简易学生信息管理系统
  8. redis学习(五) redis实现购物车
  9. android异步线程利用Handler将消息发送至UI线程
  10. XCTF(攻防世界)—进阶web题Write Up(一)