当前位置: 首页 > news >正文

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.lryc.cn/news/164280.html

相关文章:

  • 多线程的创建
  • 【django】APPEND_SLASH 路由末尾的斜杠问题
  • iOS16.0:屏幕旋转
  • Carla学习笔记(二)服务器跑carla,本地运行carla-ros-bridge并用rviz显示
  • 数学建模--退火算法求解最值的Python实现
  • 地理地形sdk:Tatuk GIS Developer Kernel for .NET Crack
  • Day_81-87 CNN卷积神经网络
  • 关于mybatisplus报错:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplat的问题
  • Spring AOP基础动态代理基于JDK动态代理实现
  • 第一章 计算机系统概述 五、中断和异常、系统调用
  • 【C语言】文件操作(上)
  • 【Linux】让笔记本发挥余热,Ubuntu20.04设置WiFi热点
  • 【云平台】遥感地信云平台收录
  • 23种设计模式之---单例模式
  • 蓝桥杯官网练习题(纸牌三角形)
  • 一辆新能源汽车的诞生之旅:比亚迪常州工厂探营
  • 【算法专题突破】双指针 - 最大连续1的个数 III(11)
  • java实现备忘录模式
  • aardio语言的通用数据表维护
  • 手写RPC框架--7.封装响应
  • Linux入门教程||Linux系统目录结构
  • LeetCode 88. 合并两个有序数组
  • C语言实现扫雷小游戏
  • 【linux基础(五)】Linux中的开发工具(上)---yum和vim
  • C++学习之list的实现
  • 一种高效且节约内存的聚合数据结构的实现
  • 机器学习(10)---特征选择
  • Python之数据库(MYSQL)连接
  • 【建站教程】使用阿里云服务器怎么搭建网站?
  • 【自然语言处理】关系抽取 —— MPDD 讲解