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:

    1. to provide fast, interactive graphics for displaying data (plots, video, etc.) and
    1. 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.py

  • API 调用: 直接在要分析的函数调用前,加上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/正向与反向工程自动生成图或代码的更多相关文章

  1. 基于AbstractProcessor扩展MapStruct自动生成实体映射工具类

    作者:京东物流 王北永 姚再毅 1 背景 日常开发过程中,尤其在 DDD 过程中,经常遇到 VO/MODEL/PO 等领域模型的相互转换.此时我们会一个字段一个字段进行 set|get 设置.要么使用 ...

  2. 使用PyQt开发图形界面Python应用专栏目录

    ☞ ░ 前往老猿Python博文目录 ░ 本专栏为收费专栏的文章目录,对应的免费专栏为<PyQt入门知识目录>,两个专栏都为基于PyQt的Python图形界面开发基础教程,只是收费专栏中的 ...

  3. 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界面看起来更加美观和协调.但是在系统中一般内置的图标样式相对比较有限,而且硬编码写到样式表里面,这 ...

  4. 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

    在默认情况下,EasyUI的DataGrid好像都没有具备自动宽度的适应功能,一般是指定像素宽度的,但是使用的人员计算机的屏幕分辨率可能不一样,因此导致有些地方显示太大或者太小,总是不能达到好的预期效 ...

  5. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  6. 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具

    基于OCILIB的oracle数据库操作总结 1.       类图 2.       基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...

  7. 基于eclipse的mybatis映射代码自动生成的插件

    基于eclipse的mybatis映射代码自动生成的插件 分类: JAVA 数据库 工具相关2012-04-29 00:15 2157人阅读 评论(9) 收藏 举报 eclipsegeneratori ...

  8. 基于eclipse的mybatis映射代码自动生成的插件http://blog.csdn.net/fu9958/article/details/7521681

    基于eclipse的mybatis映射代码自动生成的插件 分类: JAVA 数据库 工具相关2012-04-29 00:15 2157人阅读 评论(9) 收藏 举报 eclipsegeneratori ...

  9. 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)

            目录:            第1版:http://blog.csdn.net/vipbooks/article/details/51912143            第2版:htt ...

  10. API的文档自动生成——基于CDIF的SOA基本能力

    当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST ...

随机推荐

  1. FirstUI:Deepseek能帮我们做很多事情,而这款开源框架专为开发者设计的开源UI框架,让你的项目加速起飞

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 开发者们总是在寻找能够提高工作效率.简化开发流程的工具.今天,我们要介绍的是一个名为Firs ...

  2. 工具 | Hacking

    0x00 简介 Hacking是一款包含多种渗透测试功能的脚本. 下载地址: Hacking下载:Hacking下载 0x01 功能说明 Brute Force DDos Attack NMap Po ...

  3. 仿EXCEL插件,智表ZCELL产品V3.0 版本发布,底层采用canvas全部重构,功能大幅扩展,性能极致提升,满足千万级单元格加载

    本次更新是底层全部重构,按照现代浏览器要求,采用canvas方式进行了重构,预留了将来扩展空间,特别是在大数据量性能提升方面有了较大提升,可以满足千万级单元格加载,欢迎大家体验使用. 体验地址:zce ...

  4. Web前端入门第 50 问:CSS 内容溢出怎么处理?

    溢出:盒模型装不下内容的时候,超出盒子大小的内容就称之为内容溢出,这里的内容又分为盒模型和文本,所以 CSS 在处理溢出时候也分为文本和盒模型两种情况. 正常情况内容溢出应该换行自动撑开盒子大小,但某 ...

  5. 解决uniapp实现ios系统中低功耗蓝牙通讯失败问题

    UniApp 实现 App 连接低功耗蓝牙(BLE)通讯 手头上有一个 uniapp 实现低功耗蓝牙通讯设备的项目,本来 Android 版本没问题已经上线,到了发布测试 iOS 出问题了,连接上了设 ...

  6. WPF 窗口 触摸失效 的一种场景

    最近,生产线反馈,在执行生产大屏测试软件的时候,软件大概率出现不能触摸,但是可以用鼠标的的情况.刚好 这个软件又是WPF 做的,所以做了以下排查. .Net 环境: .NetFrameWork 4.8 ...

  7. 密码哈希:Bcrypt的魔法与盐值的秘密

    title: 密码哈希:Bcrypt的魔法与盐值的秘密 date: 2025/06/01 16:41:37 updated: 2025/06/01 16:41:37 author: cmdragon ...

  8. ubuntu下多开terminator的快捷指令

    sudo apt-get install terminator Ctrl+Shift+E 垂直分割窗口 Ctrl+Shift+O 水平分割窗口 F11 全屏 Ctrl+Shift+C 复制 Ctrl+ ...

  9. Vue 学习笔记 [Part 6]

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 〇. 修改配置:webpack.base.conf.js起别名 一. Vue CLI 1.1. Vue CLI3 cli3与2的区别 如何通过 ...

  10. 2025 年实用、全面的 VS Code 插件推荐!

    前言 VS Code是一款由微软开源免费.轻量级.功能强大的源代码编辑器.其轻量级体现在基础安装简洁,仅含核心编辑功能.功能强大则源于它支持丰富的语言环境插件拓展,这种模块化设计让VS Code在源代 ...