tkinter树形图组件

文章目录

    • 初步
    • 回调函数
    • 绑定滚动条

初步

Treeview是ttk中的树形表组件,功能十分强大,非常适用于系统路径的表达。为了知道属性图到底是什么,下面先做个最简单的树形图

在这里插入图片描述

其代码如下

import tkinter as tk
from tkinter import ttkdct = {"中国" : ["北京", "台北", "香港"],"美国" : ["纽约", "华盛顿"],"日本" : ["东京", "大阪"]
}win = tk.Tk() # 设置窗口大小# 此为根节点
tree = ttk.Treeview(win, show = "tree")for key in dct:father = tree.insert("", 0, key, text=key)for v in dct[key]:tree.insert(father, 1, v, text=v, values=(f"{key}-{v}"))tree.pack(side=tk.LEFT, expand = True, fill = tk.BOTH)
win.mainloop()

首先,我们创建了一个字典,用于构成树形图的节点。

接下来,ttk.Treeview生成一个树形图,这个几乎没什么问题,和tkinter其他所有组件完全一致,只是多了个"show",表明这是个树形图,说明Treeview这个组件或许还有其他形式。

然后,就到了唯一关键的函数insert,其输入参数分别为父节点、所在列、节点ID,如果不输入节点ID,那么将有系统分配,这个参数并不是必须的。而后text为其显示的名称,非常直观。最后values是一个并未体现在界面上的值,但可以调用。

回调函数

Treeview有三种基本的回调函数,分别当选择节点、打开父节点和关闭父节点时触发。仍以上述Treeview为例,其效果如下

在这里插入图片描述

具体修改方案为,在mainloop之前,添加如下代码

def slct(evt):for item in tree.selection():print(tree.item(item, "values"))def open_(evt):for item in tree.selection():print(f"{item} has opened")def close(evt):for item in tree.selection():print(f"{item} has closed")tree.bind('<<TreeviewSelect>>', slct)
tree.bind('<<TreeviewOpen>>', open_)
tree.bind('<<TreeviewClose>>', close)

其中,绑定的三个函数slct, open_和close,分别对应选中节点、打开或关闭节点时触发。其函数内容则基本相同,都是打印当前选中节点的相关值,其中父节点直接输出节点的名字,子节点则输出其内部定义的values。

通过tree.selection()可获取选中内容,其返回值是一个元组;如果改用tree.focus(),则可返回焦点所在的节点。

当然,这两个函数不仅有读取的功能,当二者有输入时,例如focus(item)可让item获得焦点;而selection(selop, items),若selop为None,则以列表形式返回所有items,若selop指定了选择方法,则按照给定的方法选中相应的items。

绑定滚动条

这种树形图如果全都展开,一定会特别长,为了在有限的区间展示无限多的树形图节点,就需要为其绑定滚动条,其实很简单,只需在mainloop前面添加下面几行代码即可

scroll = ttk.Scrollbar(win)
scroll.config(command=tree.yview)scroll.pack(side=tk.RIGHT, fill=tk.Y)
# 给treeview添加配置
tree.configure(yscrollcommand=scroll.set)

效果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106621.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Proteus仿真】【STM32单片机】安全驾驶检测系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 系统运行后&#xff0c;LCD1602显示传感器检测的酒精浓度和CO2值&#xff0c;以及阈值&#xff1b;若按下K3键进入阈值设置模式&#xff0c;默认以酒精阈值开始位置闪烁&#xff1b;再次按下K3键则进入CO…

无涯教程-JavaScript - NPV函数

描述 NPV函数通过使用折现率以及一系列未来付款(负值)和收入(正值)来计算投资的净现值。 语法 NPV (rate,value1,[value2],...)争论 Argument描述Required/OptionalRateThe rate of discount over the length of one period.RequiredValue11 to 254 arguments representing…

UDP的可靠性传输

UDP系列文章目录 第一章 UDP的可靠性传输-理论篇&#xff08;一&#xff09; 第二章 UDP的可靠性传输-理论篇&#xff08;二&#xff09; 文章目录 UDP系列文章目录前言1.TCP 和UDP格式对比2.UDP分片原理3.UDP 传输层应该注意问题4.MTU5.UDP 分片机制设计重点 一、ARQ协议什么…

2023年中国电影行业研究报告

第一章 行业概况 1.1 定义 电影行业是一门涉及电影制作、发行、放映和推广的综合艺术和商业活动。它结合了戏剧、音乐、舞蹈、绘画等多种艺术形式&#xff0c;通过视觉和听觉的方式向观众展示故事和情感。 电影不仅仅是一门艺术&#xff0c;更是一项复杂的商业运作。它涵盖了…

docker 生成镜像的几个问题

docker 生成镜像的几个问题 根据jdk8.tar.gz 打包Jdk8 镜像失败运行镜像报错差不多是网络ip错误,在网上说重启docker即可解决运行mysql5.7.25 镜像失败向daemon.json文件添加内容导致docker重启失败docker run 命令常用参数根据jdk8.tar.gz 打包Jdk8 镜像失败 首选做准备工作…

Go基础16-defer的运作机制及常见用法

defer的运作离不开函数&#xff0c;这至少有两层含义&#xff1a; ● 在Go中&#xff0c;只有在函数和方法内部才能使用defer&#xff1b; ● defer关键字后面只能接函数或方法&#xff0c;这些函数被称为deferred函数。defer将它们注册到其所在goroutine用于存放deferred函数…

时序分解 | MATLAB实现RIME-VMD霜冰优化算法优化VMD变分模态分解信号分量可视化

时序分解 | MATLAB实现RIME-VMD霜冰优化算法优化VMD变分模态分解信号分量可视化 目录 时序分解 | MATLAB实现RIME-VMD霜冰优化算法优化VMD变分模态分解信号分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 RIME-VMD【23年新算法】霜冰优化算法优化VMD变分模态分…

面向对象技术

面向对象技术 考情分析面向对象基本概念面向对象分析面向对象的设计原则面向对象测试统一建模语言事务关系图 考情分析 设计模式在新版教材被删除了 考察偏向面向对象的基本概念和UML建模 但是设计模型在案例和论文题目中出现 面向对象基本概念 c b a 面向对象分析 记忆面向对…

分布式、锁、延时任务

1. redission redission 原理 Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案) 2.zk 2.1 指令 ls / / 下有哪些子节点 get /zookeeper 查看某个子节点内容 create /aa “test” delete /aa set /aa “test01” 2.2 创建节点 模式 默认创建永久 create -e …

Linux命令200例:write用于向特定用户或特定终端发送信息

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

读高性能MySQL(第4版)笔记06_优化数据类型(上)

1. 良好的逻辑设计和物理设计是高性能的基石 1.1. 反范式的schema可以加速某些类型的查询&#xff0c;但同时可能减慢其他类型的查询 1.2. 添加计数器和汇总表是一个优化查询的好方法&#xff0c;但它们的维护成本可能很 1.3. 将修改schema作为一个常见事件来规划 2. 让事情…

Redis原理:IntSet

&#xff08;笔记总结自b站黑马程序员课程&#xff09; 一、结构 IntSet是Redis中set集合的一种实现方式&#xff0c;基于整数数组来实现&#xff0c;并且具备长度可变、有序等特征。 结构如下&#xff1a; typedef struct intset {uint32_t encoding; //编码方式uint32_t l…