PYQT5 Painter的简单入门
matplotlib性能不佳,尝试一下qt。
import numpy
import typing
from xmlrpc.server import DocXMLRPCServer
from PyQt5 import QtGui,QtCore
from PyQt5.QtCore import QPointF
from PyQt5.QtGui import QPainter,QPaintEvent,QColor, QFont
from PyQt5.QtWidgets import QApplication, QWidgetclass MyTestForm(QWidget):def __init__(self, parent: typing.Optional['QWidget'] = ..., flags: typing.Union[QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = ...) -> None:super().__init__(parent=None)self.painter_ = QPainter()self.resize(500,400)self.cx = 100self.cy =100self.r1 = 40self.r2 = 100self.origin_x_ = 0self.origin_y_ = 0self.n_ = 250self.painter_.setPen(QColor(0,0,0))self.painter_.setFont(QFont("Arial", 20))self.painter_.setRenderHint(QPainter.Antialiasing, True)def _info(self):return f"{self.cx}-{self.cy} {self.r1:.02f}-{self.r2:.02f} {self.origin_x_:.02f}-{self.origin_y_:.02f}"def paintEvent(self, a0: QtGui.QPaintEvent) -> None:self.painter_.begin(self)self.painter_.drawText(a0.rect(), 0, self._info())for r in numpy.linspace(self.r1,self.r2, self.n_):self.painter_.drawEllipse(QPointF(self.cx, self.cy), r, r)#self.painter_.drawEllipse(QPointF(self.cx, self.cy), self.r2, self.r2)self.painter_.end()def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:if a0.button() == 1:self.origin_x_ = a0.x()self.origin_y_ = a0.y()def mouseMoveEvent(self, a0: QtGui.QMouseEvent) -> None:dx = a0.x() - self.origin_x_dy = a0.y() - self.origin_y_self.cx += dxself.cy += dyself.origin_x_ = a0.x()self.origin_y_ = a0.y()self.update()def wheelEvent(self, a0: QtGui.QWheelEvent) -> None:if a0.angleDelta().y() > 0:self.r1 *= 1.1self.r2 *= 1.1else:self.r1 *= 0.9self.r2 *= 0.9self.update()import sys
app = QApplication(sys.argv)
f = MyTestForm()
f.show()
app.exec_()
虽然写起来麻烦一丢丢,但性能明显比matplotlib要强不少。
下面是250个圆圈,拖动缩放丝毫不卡顿。
PYQT5 Painter的简单入门相关推荐
- PyQT简单入门--hello world
目录 练习第一个简单小程序 Hello world 试验 传送门 pyqt初始配置 pyqt简单使用教程 练习第一个简单小程序 import sys from PyQt5.QtWidgets impo ...
- BizTalk 2006 简单入门示例程序(附源项目文件下载)
BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...
- python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门
1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...
- ARM NEON 编程简单入门1
原文:http://blog.csdn.net/silentob/article/details/72954618 ARM NEON 编程简单入门1 NEON简介 NEON是适用于ARM Corte ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- EChart.js 简单入门
EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart 这个是Visual Studio里的自带控件,使用比 ...
- 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试
[我的区块链之路]- Hyperledger fabric的简单入门(四)链码的编写及调试 之前的文章中我们有讲过了fabric的一些核心的配置文件的选项说明,讲过fabric 的网络启动 ...
- 基于vue-cli、elementUI的Vue超简单入门小例子
基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...
- 【java开发系列】—— spring简单入门示例
回顾 1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控 ...
最新文章
- C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)
- 对抗canary保护技术的几种方式
- boost::geometry::tag用法的测试程序
- VMware vsphere client报错问题
- 如何删除一个VDP服务器
- 图 | 为什么存在关于图的研究
- Matlab常用的标记符号和颜色
- python loadlibrary_使用py2exe教程LoadLibrary(pythondll)失败错误
- QT界面程序异常结束问题分析 ,弹出 SogouInput\Components\
- OpenDRIVE工具介绍及地址
- CUDA库之NPP(二):NPP实现YUV转BGR
- 计算机维修与数据恢复论文,备份恢复论文,关于计算机数据备份数据恢复技术相关参考文献资料-免费论文范文...
- C:\ProgramData\Microsoft\VisualStudio创建软连接,腾出C盘空间
- mogo语句常用用法
- 你可能会读错的字大集合
- Python的len函数探究
- react 使用 svg_在React本机中使用svg构建钟面
- 数控机床是什么编程php吗,数控车床编程实例
- 设计函数实现将一个字符串中小写字母转化为大写字母
- 一个简易的基于内容的新闻推荐系统
热门文章
- 如何设置Word文档公式序号在右边
- 如何成为技术领袖(转载)
- uniapp使用环信插件实现视频通话
- c语言来自不兼容指针类型的分配,c - 为什么我会收到“警告:来自不兼容指针类型的分配”? 结构数组中的双链表 - 堆栈内存溢出...
- cvc-complex-type.2.4.d: 发现了以元素 ‘base-extension‘ 开头的无效内容。此处不应含有子元素。
- 2020年全球EDA软件行业市场竞争格局分析 三巨头三足鼎立
- 从科学的开放精神来看开源
- 高等代数 矩阵的运算(第4章)1 加法,数量乘法,矩阵乘法,一些特殊矩阵
- GTS-阿里巴巴全新分布式事务解决方案
- 手机怎么升级为鸿蒙系统,这9款华为手机可升级为鸿蒙系统,有你的手机吗?...