SciTech-CG-Graphics-Chart-CodeGenerator-PyQtGraph: 基于PyQt的图形绘制以及应用库: UML ClassDiagram/ FlowChart/StateMachine/正向与反向工程自动生成图或代码
UML class diagram:
A pure-python graphics and GUI library built on PyQt / PySide and numpy for use in mathematics / scientific / engineering applications.
https://pyqtgraph.readthedocs.io/en/latest/
https://pyqtgraph.readthedocs.io/en/latest/api_reference/uml_overview.html
py2uml:
https://pypi.org/project/py2puml/
FlowChart:
https://pyqtgraph.readthedocs.io/en/latest/api_reference/flowchart/index.html
The State Machine Framework¶:
https://doc.qt.io/qtforpython-5/overviews/statemachine-api.html

PyQtGraph:
What is pyqtgraph?
PyQtGraph is a graphics and user interface library for Python that provides functionality commonly required in engineering and science applications. Its primary goals are:
- to provide fast, interactive graphics for displaying data (plots, video, etc.) and
- to provide tools to aid in rapid application development (for example, property trees such as used in Qt Designer).
PyQtGraph makes heavy use of the Qt GUI platform(via PyQt or PySide) for its high-performance graphics and numpy for heavy number crunching. In particular, pyqtgraph uses Qt’s GraphicsView framework which is a highly capable graphics system on its own; we bring optimized and simplified primitives to this framework to allow data visualization with minimal effort.
It is known to run on Linux, Windows, and OSX
What can it do?
Amongst the core features of pyqtgraph are:
- Basic data visualization primitives: Images, line and scatter plots
- Fast enough for realtime update of video/plot data
- Interactive scaling/panning, averaging, FFTs, SVG/PNG export
- Widgets for marking/selecting plot regions
- Widgets for marking/selecting image region-of-interest and automatically slicing multi-dimensional image data
- Framework for building customized image region-of-interest widgets
- Docking system that replaces/complements Qt’s dock system to allow more complex (and more predictable) docking arrangements
- ParameterTree widget for rapid prototyping of dynamic interfaces (Similar to the property trees in Qt Designer and many other applications)
Examples
PyQtGraph includes an extensive set of examples that can be accessed by running either python -m pyqtgraph.examples or
import pyqtgraph.examples
pyqtgraph.examples.run()
This will start a launcher with a list of available examples. Select an item from the list to view its source code and double-click an item to run the example.
Python自动绘制UML类图、函数调用图(Call Graph)
1. 引言
在设计软件、分析代码时,我们常常会借助UML以及函数调用图,来帮自己梳理思路。
尤其是遇到bug时,借助这些可视化手段,也可以帮你在调试过程中发现逻辑错误。
本文主要介绍以下两个方法:
- 用 graphviz+pyreverse,自动提取 python代码 的UML类图和包依赖关系。
- 用 graphviz+pycallgraph,自动提取 python代码 的动态调用流程图。
2. 绘制UML类图
2.1 安装 graphviz:
Graphviz 是一个开源图形可视化软件。Graphviz 以简单的文本语言对图形进行描述,并用多种格式制作图表,例如SVG(网页图像),Postscript(包含在 PDF 或其他文档的图片) ;或png/jpg(交互式图形浏览器显示)。
- 官网安装graphviz: http://www.graphviz.org/download/
下载exe安装包,完成graphviz软件安装,并找到bin路径。 - 设置环境变量:将 bin 路径添加到 PATH
- 安装对应python库:
$ pip install graphviz
2.2 安装pyreverse(直接安装pylint因为其已经包含pyreverse)
- pyreverse: 用于对 Python 代码进行逆向工程的实用程序。
可以分析Python代码并提取 UML 类图和包依赖关系:
* 类属性,及其类型
* 类方法
* 类之间的继承链接
* 类之间的关联链接
* 异常和接口的表示 - 安装pylint:
$ pip install pylint
2.3 安装 pycallgraph: $ pip install pycallgraph
2.3 绘制UML类图
UML类图常用于面向对象的建模,UML类图的每个方框是一个对象类, 每个框从上到下分为三部分:
- 第一部分是对象类名称
- 第二部分是类的属性
- 第三部分是类的函数。
在Shell输入语句,生成package的UML图:
$ pyreverse --help # 常用选项有:
# -o :设置保存图像的格式,如png, dot, puml, plantuml, mmd, html
# -p Name: 输出图形以packages_<PROJECT_NAME>.png为名称保存
# -m <y or n>, --module-names <y or n>
# -p <project name>, --project <project name>
# --colorized, --max-color-depth <depth>, --color-palette <color1,color2,...>
$ pyreverse -o dot -p Pyreverse -m y --colorized ../whoosh/
[...]
creating diagram packages_Pyreverse.dot
creating diagram classes_Pyreverse.dot
[...]
3. 绘制函数调用图
pycallgraph是对python代码进行动态调用图分析的python模块。包括模块之间的调用流程、函数调用次数及用时。
函数调用图(Call Graph)是一个控制流程图,用于表示程序d的各单元之间的调用关系。每个节点之间的边缘表示调用过程。循环曲线表示递归过程调用。
绘制Call Graph常用的有:pycallgraph、pyan(静态调用图)、gprof2dot 、code2flow等。本文介绍pycallgraph的用法。
3.1 安装: $ pip install pycallgraph graphviz
3.2 使用示例
Shell 调用:
$ pycallgraph graphviz -- ./mypythonscript.pyAPI 调用: 直接在要分析的函数调用前,加上
with PyCallGraph(output=GraphvizOutput())::
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
with PyCallGraph(output=GraphvizOutput()):
# 调用你要分析的函数
code_to_profile()
如果需要指定调用图中包含(include) 哪些函数、排除(exclude)哪些函数,
就要用到GlobbingFilter(include=[....])、GlobbingFilter(exclude=[....]),例如这样:
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput
from pycallgraph import Config
from pycallgraph import GlobbingFilter
def main():
# TODO: 调用各种类、函数
return
if name == "main":
config = Config()
# 调用图中包括(include)哪些函数
# 用moduleName.表示,包含某个模块内的所有函数
config.trace_filter = GlobbingFilter(include=[
'main',
'app.',
'widgets.list_widget.',
'utils.RegionInfo.'
])
# 调用图中不包括(exclude)哪些函数
# config.trace_filter = GlobbingFilter(exclude=[
# 'moduleA.*',
# 'moduleB.*',
# '*.funcB'
# ])
graphviz = GraphvizOutput()
graphviz.output_file = 'graph.png'
with PyCallGraph(output=graphviz, config=config):
main()
在程序正常运行完之后,就会在当前路径生成graph.png文件。
越复杂程序,生成的调用图就会越大,注意选取你focus的函数进行可视化。
其他高级用法可以参考官方文档:`https://pycallgraph.readthedocs.io/en/master/`
SciTech-CG-Graphics-Chart-CodeGenerator-PyQtGraph: 基于PyQt的图形绘制以及应用库: UML ClassDiagram/ FlowChart/StateMachine/正向与反向工程自动生成图或代码的更多相关文章
- 基于AbstractProcessor扩展MapStruct自动生成实体映射工具类
作者:京东物流 王北永 姚再毅 1 背景 日常开发过程中,尤其在 DDD 过程中,经常遇到 VO/MODEL/PO 等领域模型的相互转换.此时我们会一个字段一个字段进行 set|get 设置.要么使用 ...
- 使用PyQt开发图形界面Python应用专栏目录
☞ ░ 前往老猿Python博文目录 ░ 本专栏为收费专栏的文章目录,对应的免费专栏为<PyQt入门知识目录>,两个专栏都为基于PyQt的Python图形界面开发基础教程,只是收费专栏中的 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...
- 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度
在默认情况下,EasyUI的DataGrid好像都没有具备自动宽度的适应功能,一般是指定像素宽度的,但是使用的人员计算机的屏幕分辨率可能不一样,因此导致有些地方显示太大或者太小,总是不能达到好的预期效 ...
- 基于DES算法加密的防撞库密码系统项目总结
项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
基于OCILIB的oracle数据库操作总结 1. 类图 2. 基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...
- 基于eclipse的mybatis映射代码自动生成的插件
基于eclipse的mybatis映射代码自动生成的插件 分类: JAVA 数据库 工具相关2012-04-29 00:15 2157人阅读 评论(9) 收藏 举报 eclipsegeneratori ...
- 基于eclipse的mybatis映射代码自动生成的插件http://blog.csdn.net/fu9958/article/details/7521681
基于eclipse的mybatis映射代码自动生成的插件 分类: JAVA 数据库 工具相关2012-04-29 00:15 2157人阅读 评论(9) 收藏 举报 eclipsegeneratori ...
- 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)
目录: 第1版:http://blog.csdn.net/vipbooks/article/details/51912143 第2版:htt ...
- API的文档自动生成——基于CDIF的SOA基本能力
当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST ...
随机推荐
- Web前端入门第 42 问:聊聊 CSS 元素上下左右(水平+垂直)同时居中有几种方法
影响元素位置的 CSS 属性基本介绍完毕(参考前几篇文章),现思考一个最常见的需求: 一个子元素,要摆放在盒子的正中央,使用 CSS 布局手段,究竟有多少种实现方式? 上下左右(水平方向.垂直方向)要 ...
- 高度混淆和多层嵌套的JSP案例免杀思路
免责声明:本文所涉及的技术仅供学习和参考,严禁使用本文内容从事违法行为和未授权行为,如因个人原因造成不良后果,均由使用者本人负责,作者及本博客不承担任何责任. 01 分析特征 目前webshell检测 ...
- vue3 基础-样式绑定语法
本篇讲 vue 通过数据去进行 dom 样式的绑定操作, 主要分为 字符串, 数组, 对象等方式, 这个非常好理解, 凭着我们朴素的情感就能一步领悟到位的, 就还是演示一段吧. 字符 & 数组 ...
- 杂七杂八系列----浅谈.NET微服务架构的演变
服务架构的演变 单体架构=>分布式架构=>SOA架构=>微服务架构=>Service Mesh=>Cloud Native 单体架构/垂直架构 分布式架构 SOA架构 微 ...
- CV中常用Backbone-3:Clip/SAM原理以及代码操作
前面已经介绍了简单的视觉编码器,这里主要介绍多模态中使用比较多的两种backbone:1.Clip:2.SAM.对于这两个backbone简单介绍基本原理,主要是讨论使用这个backbone. 1.C ...
- Golang与Elasticsearch搭配检索运用
一.简介下: Elasticsearch 是一个高性能.分布式.全文搜索与分析引擎,它的核心优势在于 对结构化和非结构化数据进行高效搜索.统计与分析,远远超出传统关系数据库(如 MySQL)的全文检索 ...
- gRPC-go的一些tips
1.请注意,在 gRPC-Go 中,RPC 以阻塞/同步模式运行,这意味着 RPC 调用等待服务器响应,并且将返回响应或错误. Note that in gRPC-Go, RPCs operate i ...
- GC-QA-RAG 智能问答系统的文档切片
本章节介绍 GC-QA-RAG 智能问答系统的文档切片原理,即如何将原始文档的知识点切片后存入向量数据库. 1. 原始思路 将整个文档作为输入,交由大语言模型自动生成问答对(QA Pairs),以支持 ...
- gitea服务的搭建
gitea服务的搭建 gitea是一个轻量级的Git服务器,可以在Linux.Windows和MacOS等平台上运行.gitea提供了一个简洁的Web界面,方便用户管理代码仓库.团队协作和代码审查.g ...
- 《容器化.NET应用架构指南》脑图学习笔记(一)
一.关于这本官方"圣经" 作为.NET程序员,对于微软官方推动的架构示例总是特别关注,从PetShop到MusicStore再到eShopOnContainers,每一次关注,都会 ...