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 ...
随机推荐
- 警告Establishing SSL connection without server's identity verification is not recommended
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] SpringBo ...
- vue 开发环境的搭建
一.整个流程: 安装nodejs>>安装vue>>安装vue-cli>>初始化 webpack(生成代码)>>安装依赖>>运行vue程序 二 ...
- 慕课网--mysql开发技巧一 学习笔记
现在存在下面的两张表,表的结构如下所示 师徒四人表结构:id,user_name,over数据:id user_name over1 唐僧 旃檀功德佛2 猪八戒 净坛使者3 孙悟空 斗战胜佛4 沙僧 ...
- SDL软件安全读书笔记(一)
# 如何应对当前的全球网络安全威胁? 开发安全漏洞尽可能少的软件,应该着眼于源头安全. 边界安全盒深度防御是重要的安全手段,但软件自身的安全是安全防护的第一关. 即使软件源头存在较少的漏洞,这些漏洞也 ...
- 使用nginx配置域名及禁止直接通过IP访问网站
前段时间刚搭建好个人网站,一直没有关注一个问题,那就是IP地址也可以访问我的网站,今天就专门研究了一下nginx配置问题,争取把这个问题研究透彻. 1. nginx配置域名及禁止直接通过IP访问 先来 ...
- dart快速入门教程 (7.4)
7.12.多态 多态字面上理解就是多种状态,通俗的说,多态表现为父类定义一个方法不去实现,子类继承这个方法后实现父类的方法,这个方法有多种表现 // import 'person.dart'; voi ...
- CSS布局之盒子模型[一]
每个HTML标签都会生成一个盒模型,盒模型是正常流布局非常重要的概念.盒模型由内边距(padding)+长度(width)+高度(height)+边框(border)+外边距(margin)组成. 1 ...
- StringBuider 在什么条件下、如何使用效率更高?
声明:本文首发于博客园,作者:后青春期的Keats:地址:https://www.cnblogs.com/keatsCoder/ 转载请注明,谢谢! 引言 都说 StringBuilder 在处理字符 ...
- 一周学会linux实战笔记
山篇 思考------实践-------再思考-------再实践 1.高效愉快地学习 2.先建立一个整体框架,然后细节 3.用的什么再学习什么 4.先know how,再know why 5.计算机 ...
- 从零开始搭建SpringBoot项目
一.新建springboot项目 1. new-->Project-->Spring Initralizr Group:com.zb Artifact:zbook springboot v ...