PyQt5绘图
QPainter
功能:QPainter实现在QWidget上画图功能
说明:绘图必须在paintEvent中完成,且要在bengin和end之间作图
接口:
| 方法 | 描述 |
| begin | 开始画图 |
| end | 结束画图 |
| drawLine(int x1, int y1, int x2, int y2) | 绘制直线从(x1,y1)到(x2,y2) |
| drawRect(int x, int y, int w, int h) | 绘制矩形起始坐标(x,y),宽度w,高度h |
| drawText | 绘制字符串 |
| FillRect | 使用颜色填充矩形 |
| setBrush | 设置画刷 |
| setPen | 设置画笔 |
QPen
功能:画笔,主要是设置线条的格式和颜色
QBrush
功能:画刷,主要是设置填充的格式和颜色
例子
import random
import string
import sys from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QPainter, QFont, QColor, QPen, QBrush
from PyQt5.QtWidgets import QApplication, QWidget class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__() # def paintEvent(self, QPaintEvent):
# painter = QPainter(self)
# painter.begin(self)
# painter.setFont(QFont('Courier New', 20))
# painter.setPen(QColor(168, 34, 3))
# painter.drawText(QPaintEvent.rect(), Qt.AlignCenter, 'hello world')
# painter.end() # def paintEvent(self, QPaintEvent):
# painter = QPainter(self)
# painter.begin(self)
# painter.setFont(QFont('Courier New', 20))
# painter.setPen(QColor(168, 34, 3))
#
# for i in range(10000):
# painter.drawPoint(random.randint(0, 300), random.randint(0, 300))
#
# painter.end() # def paintEvent(self, QPaintEvent):
# painter = QPainter(self)
# painter.begin(self)
#
# pen = QPen(Qt.red, 2, Qt.SolidLine)
# painter.setPen(pen)
# painter.drawLine(20, 20, 400, 20)
#
# pen.setStyle(Qt.DashDotLine)
# painter.setPen(pen)
# painter.drawLine(20, 40, 400, 40)
#
# painter.end() # def paintEvent(self, QPaintEvent):
# painter = QPainter(self)
# painter.begin(self)
#
# brush = QBrush(Qt.SolidPattern)
# brush.setColor(Qt.green)
# painter.setBrush(brush)
# painter.drawRect(20, 20, 200, 100)
#
# brush = QBrush(Qt.HorPattern)
# brush.setColor(Qt.red)
# painter.setBrush(brush)
# painter.drawRect(20, 140, 200, 100)
#
# painter.end() # 实现随机验证码
def paintEvent(self, QPaintEvent):
painter = QPainter(self)
painter.begin(self)
painter.setFont(QFont('Courier New', 50))
randomString = "".join([random.choice(string.digits + string.ascii_letters) for i in range(10)])
for i in range(len(randomString)):
painter.setPen(QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
painter.drawText(50 + i * 40, 150, randomString[i]) for i in range(25000):
painter.setPen(QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
painter.drawPoint(random.randint(0, 500), random.randint(0, 300)) painter.end() if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.resize(500, 300)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
PyQt5绘图的更多相关文章
- PyQt5绘图API
PyQt5绘图API大全1.绘图API:绘制文本#1.文本 2.各种图形 3.图像#QPainter painter=QPainter() painter.begin() painter.end() ...
- 使用 PyQt5 实现图片查看器
一.前言 在学习 PyQt5 的过程中我会不断地做一些小的 Demo,用于让自己能够更好地理解和学习,这次要做的就是一个图片查看器,主要功能包括打开图片.拖动图片.放大和缩小图片. 最终实现的图片查看 ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(2)-- 画点
[概览] 本文实现如下的程序:(在窗体中绘画出[-100, 100]两个周期的正弦函数图像) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编 ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(1)-- 绘写文字
[概览] 本文实现如下的程序:(在窗体中绘画出文字) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到eric 6, ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(3)-- 画线
[概览] 本文实现如下的程序:(在窗体中绘画出各种不同风格的线条) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到 ...
- Python3使用PyQt5制作简单的画板/手写板
0.目录 1.前言 2.简单的画板1.0 在定点和移动中的鼠标所在处画一条线 3.简单的画板2.0 在定点和移动中的鼠标所在处画一条线 并将画过的线都保留在窗体上 4.简单的画板3.0 将按住鼠标后移 ...
- PyQt5多点触控写字板实现及困惑
Qt支持程序多点触控,就想使用PyQt5做一个触控画板,经过几番周折,查阅了TouchEvent官方文档,又参考了一篇QT for Android的例子,采用eventfilter过滤器来识别触屏事件 ...
- pyqt5之简单窗口的创建
在学完tkinter后,发现tkinter在布局方面特别的不方便(Tkinter资料:http://effbot.org/tkinterbook/tkinter-index.htm),因此学习pyqt ...
- 一、PyQt5基础概念与安装配置
一.初识PyQt5 对于桌面程序开发,用户图形界面(GUI)的设计非常重要.一款美观.易用的用户界面可以很大程度上提高对使用这的友好度.由于Python最初是作为脚本语言开发,并没有GUI功能.但Py ...
随机推荐
- Java架构师如何学习?
引言 古人云:"活到老,学到老."互联网算是最辛苦的行业之一,"加班"对工程师来说已是"家常便饭",同时互联网技术又日新月异,很多工程师都疲 ...
- Netty的Marshalling编解码器
1.编码与解码 通常我们习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输.数据持久化或者其它用途.反之,解码(Decode)称为反序列化 ...
- activity的四种启动模式详细分析
1.android中通过任务队列来管理activity 采用栈的结构就是后进先出 手机里面如果启动多个应用就会启动多个任务栈来管理对应的activity. 主要解决下面的问题:对应的四种启动模式: 1 ...
- C#数据结构与算法系列(十五):排序算法(SortAlgorithm)
1.介绍 排序是将一组数据,以指定的顺序进行排序的过程 2.分类 内部排序法:指将需要处理的所有数据都加载到内部存储器中进行排序 外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序
- Java wait 和 sleep 的区别
一.区别 sleep 来自 Thread 类,和 wait 来自 Object 类 sleep 方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或方法 wait,notify和 ...
- [javascript]js原型链以及原型链继承
基础的三个要素: 函数 ,函数实例,实例原型. 实例原型相当于 父类, 函数相当于构造函数 举例: class Fn extends Fn.prototype{ } 实例: let f = new F ...
- 《UNIX环境高级编程》(APUE) 笔记第十章 - 信号
10 - 信号 GitHub 地址 1. 信号 信号是 软中断 ,信号提供了一种处理异步事件的方法. 当造成信号的事件发生时,为进程 产生 一个信号(或向进程 发送 一个信号).事件 可以是硬件异常( ...
- Python进阶之浅谈内置方法
目录 有序or无序和可变or不可变 数字类型内置方法 整形 浮点型 字符串类型内置方法 有序or无序和可变or不可变 有序:有索引 无序:无索引 可变:变量值变,id不变 不可变:变量值变,id也变 ...
- Java String的相关性质分析
引言 String可以说是在Java开发中必不可缺的一种类,String容易忽略的细节也很多,对String的了解程度也反映了一个Java程序员的基本功.下面就由一个面试题来引出对String的剖析. ...
- python案例远程执行命令
------类似于cmd的功能,client执行命令,server发命令结果发送到client -----------server.py------------------- import subpr ...