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绘图的更多相关文章

  1. PyQt5绘图API

    PyQt5绘图API大全1.绘图API:绘制文本#1.文本 2.各种图形 3.图像#QPainter painter=QPainter() painter.begin() painter.end() ...

  2. 使用 PyQt5 实现图片查看器

    一.前言 在学习 PyQt5 的过程中我会不断地做一些小的 Demo,用于让自己能够更好地理解和学习,这次要做的就是一个图片查看器,主要功能包括打开图片.拖动图片.放大和缩小图片. 最终实现的图片查看 ...

  3. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(2)-- 画点

    [概览] 本文实现如下的程序:(在窗体中绘画出[-100, 100]两个周期的正弦函数图像) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编 ...

  4. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(1)-- 绘写文字

    [概览] 本文实现如下的程序:(在窗体中绘画出文字) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到eric 6, ...

  5. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(3)-- 画线

    [概览] 本文实现如下的程序:(在窗体中绘画出各种不同风格的线条) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到 ...

  6. Python3使用PyQt5制作简单的画板/手写板

    0.目录 1.前言 2.简单的画板1.0 在定点和移动中的鼠标所在处画一条线 3.简单的画板2.0 在定点和移动中的鼠标所在处画一条线 并将画过的线都保留在窗体上 4.简单的画板3.0 将按住鼠标后移 ...

  7. PyQt5多点触控写字板实现及困惑

    Qt支持程序多点触控,就想使用PyQt5做一个触控画板,经过几番周折,查阅了TouchEvent官方文档,又参考了一篇QT for Android的例子,采用eventfilter过滤器来识别触屏事件 ...

  8. pyqt5之简单窗口的创建

    在学完tkinter后,发现tkinter在布局方面特别的不方便(Tkinter资料:http://effbot.org/tkinterbook/tkinter-index.htm),因此学习pyqt ...

  9. 一、PyQt5基础概念与安装配置

    一.初识PyQt5 对于桌面程序开发,用户图形界面(GUI)的设计非常重要.一款美观.易用的用户界面可以很大程度上提高对使用这的友好度.由于Python最初是作为脚本语言开发,并没有GUI功能.但Py ...

随机推荐

  1. int与Integer的区别(基本类型与复杂类型的对比)转

    基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型. Java中的简单类型从概念上分为四种:实数.整数.字符.布尔值.但是有一点需要说明的是,Java里面只有八种原始类型,其列表如下: 实数: ...

  2. Spring系列.事务管理原理简析

    Spring的事务管理功能能让我们非常简单地进行事务管理.只需要进行简单的两步配置即可: step1:开启事务管理功能 @Configuration //@EnableTransactionManag ...

  3. mysql replace替换某字段的值

    由于最近我们的一个网站回购了一个很好的域名所有与之相关的项目都需要修改: 今天接到一个任务将我们会员开通的个人网站的二级域名换成新域名,看了一下库已开通的还很少才2w多,且要换的和之前库中的数据很规则 ...

  4. 呼~~~~--历时几个星期终于搞好了HTTPS协议---阿里云

    打开网站加入阿里云官网 https://yundun.console.aliyun.com/?p=cas#/overview/cn-hangzhou 登陆查看自己的证书 没有点击购买证书 -- 选中对 ...

  5. Flask01-HelloWorld

    # flask学习 参考:http://www.pythondoc.com/flask-mega-tutorial/ ## python3. 默认支持虚拟环境使用(用最简单的方法,解决问题) wget ...

  6. C# Thread、lock

    class Program { private static readonly object obj = new object(); static void Main(string[] args) { ...

  7. 线性表的顺序存储和链式存储c语言实现

    一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...

  8. 洛谷 P1196 【银河英雄传说】

    这道题其实就是一个带权并查集的基础题,维护的是点权,所以我们要维护两个数组dis:表示当前点到父亲节点的距离,size:当前子树的大小.那么程序就自然出来了: 代码: #include <bit ...

  9. 二.httpRequest-httpResponse-JsonResponse对象

     一.HttpRequest对象 HttpRequest在django.http这个模块中 它是用django创建 文档https://docs.djangoproject.com/en/1.11/r ...

  10. 极致Web性能 —— SPA性能指南

    前言 前端框架时代,为开发体验.效率与页面性能带来,非常大的革命.大家纷纷拿起一系列打包工具(webpack/parcel etc.),配合一系列加载器快速搭建起一个 SPA 页面. SPA 应用带来 ...