1. 思路

  • QGraphicsEllipseItem 来绘制节点和节点的值
  • painter drawLine 绘制节点之间的连线 线的起始点未结点的圆心位置
  • 节点位置计算
    • 可通过二叉树前序遍历 子节点位置 = 父节点位置 + 偏移

可视化如下序列

[3,9,20,null,null,15,7]

效果:

2. 代码

2.1 结点类

class MyQGraphicsEllipseItem(QGraphicsEllipseItem):left_node = Noneright_node = Nonedef __init__(self, parent_node, pos, node_val):super(MyQGraphicsEllipseItem, self).__init__(QRectF(pos[0], pos[1], pos[2], pos[3]))self.pos = posself.radius = int((pos[2]) / 2 )print(pos, self.radius)self.parent_node = parent_nodeself.node_val = str(node_val)self.sel_brush = QBrush(QColor("#F62A66"))self.sel_pen = QPen(QColor("#FFD933"))self.un_sel_brush = QBrush(QColor("#374955"))self.un_sel_pen =  QPen(QColor("#FFD933"))self.seled = Falseself.switch_pen_brush()def paint(self, painter:QPainter, item, widgt):super().paint(painter, item, widgt)# 绘制节点 valpainter.drawText(self.boundingRect(), Qt.AlignmentFlag.AlignCenter, self.node_val)if self.parent_node is not None:# 绘制节点之间连线painter.drawLine(self.pos[0] + self.radius, self.pos[1]+self.radius, self.parent_node.pos[0]+self.radius, self.parent_node.pos[1]+self.radius)def switch_pen_brush(self):if self.seled:self.setBrush(self.sel_brush)self.setPen(self.sel_pen)else:self.setBrush(self.un_sel_brush)self.setPen(self.un_sel_pen)def mouseReleaseEvent(self, event):self.seled = not self.seledself.switch_pen_brush()self.update()global_ctx.set_sel_node(self)def mousePressEvent(self, event):pass

pyqt 可视化二叉树相关推荐

  1. Python界面 PyQT可视化开发(python3+PyQt5+Qt Designer)

    前言 以前制作一个Python窗体界面,我都是用GUI窗口视窗设计的模块Tkinter一点一点敲出来的,今天朋友问我有没有Python窗体的设计工具,"用鼠标拖拖"就能完成窗体设计 ...

  2. 手写汉字识别-单个汉字识别-pyqt可视化交互界面-python代码

    视频教程: python手写汉字识别_哔哩哔哩_bilibili 效果图如下: 完整的代码界面如下: 代码用的python编程语言,cnn神经网络进行模型的训练 各个代码及文件夹介绍 data文件下放 ...

  3. 利用python爬取电影天堂搜索部分,并利用pyqt可视化

    爬虫部分 def crawls_home(film_name):     name = film_name.encode('gb2312')     name = str(name)[1:]     ...

  4. 【目标检测】YOLOv5-PyQT可视化例程开发

    前言 花了几天功夫做了一个YOLOv5的PyQT可视化程序,主要针对多幅图片训练.自动标注和检测展示.涉及正在进行的项目,暂时不开源.在开发过程中,踩了不少坑,这里简单做一些记录. 项目使用到的开源代 ...

  5. python +keras实现图像分类(入门级例子讲解)

    一.项目描述 数据集来源于kaggle猫狗大战数据集.训练集有25000张,猫狗各占一半.测试集12500张.希望计算机可以从这些训练集图片中学习到猫狗的特征,从而使得计算机可以正确的对未曾见过的猫狗 ...

  6. R语言任务视图:机器学习与统计学…

    机器学习是计算机科学和统计学的边缘交叉领域,R关于机器学习的扩展包大概包括以下几个方面: 神经网络(Neural Networks) : 单隐含层神经网络在nnet 包(与R基础包一同发布)中实现.R ...

  7. YOLOv5实现吸烟行为检测

    YOLOv5实现吸烟行为检测 配置环境 安装pytorch(gpu版本和cpu版本的安装) YOLOv5所需其他依赖的安装 使用训练好的吸烟检测模型来进行推理 训练吸烟检测模型 配置环境 首先需要安装 ...

  8. python--数据结构--二叉排序树

    # search_bs_tree.py """ 二叉排序树又称为二叉查找树,它是一种特殊的二叉树. 其定义为:二叉树排序树或者时一棵空树,或者是具有如下性质的二叉树.(1 ...

  9. YOLOv5实现火焰和烟雾检测

    YOLOv5实现火焰和烟雾检测 安装环境 首先需要安装anaconda和pycharm,若不知道如何安装,请参考这篇博客 安装好anaconda后,在上面新建python3.8虚拟环境,打开anaco ...

最新文章

  1. mysql definer_mysql常见问题之视图权限控制--安全性为DEFINER
  2. 如何反映两条曲线的拟合精度_你知道850加工中心定位精度的检测有哪些吗?
  3. mysql 增量备份_MySQL增量备份与恢复(增量备份概述、特点,断点恢复实操)
  4. 一步一步写算法(之挑选最大的n个数)
  5. 【单目标优化求解】基于matlab被囊群算法(TSA)求解最优目标问题【含Matlab源码 1567期】
  6. js操作json对象
  7. Markdown常用数学符号
  8. Idea导入项目及相关环境配置
  9. 根据经纬度计算两点之间的距离
  10. Android系统开发篇(二) —— 建立Android系统开发环境之Ubuntu 20.04.4 LTS
  11. python工程师的职业规划_一名Python开发工程师的职业规划
  12. (231)Verilog HDL:减法器
  13. 对标测评YD云电脑和天翼云电脑公众版
  14. Prometheus原理详解
  15. (附源码)springboot车辆管理系统 毕业设计031034
  16. openEuler | 树莓派安装openEuler-Raspi
  17. 微信小程序+Servlet后台开发(一)
  18. 2018年俄罗斯世界杯对阵图(法国冠军杯![2018年 07月 12日 星期四 18:15:26 CST])
  19. 当《出师表》翻译成白话文
  20. 所谓云原生应用的概念理解

热门文章

  1. 小a与星际探索vector向量
  2. 机械工程专业与c语言的联系,新工科背景下的机械专业C语言课程改革
  3. (OK) MIMP - 18 ( 5 nodes) - 抓包-缺少 MPTCP-JION - 发现了另一个问题【M1 ping M5】不可以 ping 通
  4. 3 移动机器人路径规划(1- 栅格地图绘制)
  5. [附源码]Python计算机毕业设计SSM快递代收系统(程序+LW)
  6. 利用Arcgis Engine 二次开发的使用和总结
  7. 不用u盘如何在小米电视上安装电视直播软件
  8. android 杀死程序收不到推送_Android收不到推送解决方案
  9. Weka安装及简单应用
  10. MySql引擎、索引