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. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?

    在 C/C++/Java 等等语言中,整型变量的自增或自减操作是标配,它们又可分为前缀操作(++i 和 --i)与后缀操作(i++ 和 i--),彼此存在着一些细微差别,各有不同的用途. 这些语言的使 ...

  2. Python爬虫实战,完整的思路和步骤(附源码)

    前言 小的时候心中总有十万个为什么类似的问题,今天带大家爬取一个问答类的网站. 本堂课使用正则表达式对文本类的数据进行提取,正则表达式是数据提取的通用方法. 环境介绍: python 3.6 pych ...

  3. RabbitMQ:二、客户端开发向导

    建立Connection,创建Channel,注意Channel不能在线程间共享(非线程安全) 创建交换器和队列 消费者消费消息支持推和拉两种模式 推:通过consume方法订阅队列 拉:通过chan ...

  4. Spark学习笔记(三)-Spark Streaming

    Spark Streaming支持实时数据流的可扩展(scalable).高吞吐(high-throughput).容错(fault-tolerant)的流处理(stream processing). ...

  5. js基础练习题(4)

    9.对象 阅读代码,回答问题 function User(name) { var name1 = name; this.name2 = name; function getName1() { retu ...

  6. pythonic context manager知多少

    Context Managers 是我最喜欢的 python feature 之一,在恰当的时机使用 context manager 使代码更加简洁.清晰,更加安全,复用性更好,更加 pythonic ...

  7. Python之浅谈面向对象

    目录 面向对象和面向过程 面向过程 面向对象 类与对象 定义类 在现实世界中:先有对象,再有类 在程序中,务必保证:先定义(类),后使用(产生对象) 产生对象 类 对象 产生对象 属性查找顺序 对象赋 ...

  8. P3879 阅读理解

    都这么大了,you这些怎么能算生词呢,难道三年级以前就有人做蓝题了吗(是我不配) 我觉得这道题出难一点点的话,可以整行读入什么的(口嗨怪).先看题目,对于每个生词,输出他出现在了哪些文章(需要排序). ...

  9. Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂

    1 前言 Kubernetes又简称k8s,是Google开源的容器集群管理系统,最近也是火热.闲来无事(为了发文),捣鼓了一下,在Mac上搭建Kubernetes,遇到一些坑,也记录一下. 另外,D ...

  10. MongoDB安装和入门

    什么是MongoDB MongoDB是一个文档数据库,提供好的性能,领先的非关系型数据库.采用BSON存储文档数据.2007年10月,MongoDB由10gen团队所发展.2009年2月首度推出.Mo ...