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. getopt( )和 getopt_long( )
  2. 手把手视频:万能开源Hawk抓取动态网站
  3. 时间复杂度为on的排序算法_快速排序的时间复杂度为啥是为O(nlogn)
  4. 配置Exchange Server 2010数据库高可用性组(DAG)
  5. PHP防止数字太大转化为科学计数法的方法
  6. Open Graphics Library初步_搭建环境_GLUT
  7. RTDS学习笔记——网口连接
  8. UTM坐标和WGS84坐标(如何转换?)
  9. 凝思6.0.60操作系统编译安装sqliteman(版本1.2.2)
  10. 时间节点管理的自我反省
  11. 游泳池 (Standard IO)
  12. 三极管控制继电器接法
  13. 趣店创新园举办开工奠基仪式 罗敏:总部迁至厦门 带来上千人才
  14. excel制作文件夹侧标签
  15. CSS中的text-overflow属性详解 (控制文字在一行显示,超出部分加省略号)
  16. 云服务器和vps主机有什么 区别,到底哪个更好?
  17. 软件安全性测试设计的基本原则
  18. excel不均匀坐标轴_使用不等距的坐标轴标签来改变Excel图表的展现形态的方法...
  19. 第14届蓝桥杯模拟赛第一套(超声波+串口)
  20. malloc lab

热门文章

  1. Gson格式化LocalDateTime
  2. Bentley ORD(openroads designer) 二次开发(BIM)第二节 基础接口分享
  3. 如何高效录制教学视频?
  4. Surround360 Render目录下CALIBRATION文档——中文翻译
  5. 护眼灯显色指数多大最好?一文了解护眼灯显色指数怎么选
  6. Python 写文件中文乱码问题
  7. elasticsearch2.4.2安装(2) --插件marvel
  8. 十三届蓝桥青少组省赛Python-20220423
  9. 使用ssr退出后,电脑能连上无线网,但是不能上网的解决方法
  10. 【FreeRTOS(七)】软件定时器