控件之ttk.Treeview表格、树状数据

2024-06-19 03:32

本文主要是介绍控件之ttk.Treeview表格、树状数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Treeview表格数据')columns=['1', '2', '3','4','5']
tree = ttk.Treeview(root, column=columns,height=20,show='headings')
tree.pack()tree.heading('1', text='学号')
tree.heading('2', text='姓名')
tree.heading('3', text='性别')
tree.heading('4', text='成绩')
tree.heading('5', text='名次')tree.column('1', width=100,anchor='center')
tree.column('2', width=100, anchor='center')
tree.column('3', width=100, anchor='center')
tree.column('4', width=100, anchor='center')
tree.column('5', width=100, anchor='center')Z = ['0001','赵一','男','658','1']
Q = ['0002','钱二','男','648','2']
S = ['0003','孙三','女','638','3']
L = ['0004','李四','女','628','4']number = ['001','002','003','004']
name = ['赵一','钱二','孙三','李四']
gender= ['男','男','女','女']
score = ['658','648','638','628']
rank = ['1','2','3','4']'''
函数语法
range(start, stop[, step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
'''
for i in range(min(len(number), len(name), len(gender), len(name), len(name))):  # 写入数据tree.insert('', i, values=(number[i],name[i],gender[i],score[i],rank[i]))
'''
#排序部分1:
def treeviewrank(tv, col, reverse):  # Treeview、列名、排列方式l = [(tv.set(k, col), k) for k in tv.get_children('')]l.sort(reverse=reverse)  # 排序方式# rearrange items in sorted positionsfor index, (val, k) in enumerate(l):  # 根据排序后索引移动tv.move(k, '', index)tv.heading(col, command=lambda: treeviewrank(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
'''def set_itemvalue(event):for item in tree.selection():item_text = tree.item(item, "values")print(item,item_text)#确定编辑的行、列column = tree.identify_column(event.x)  # 列row = tree.identify_row(event.y)  # 行print(column, row)cn = int(str(column).replace('#', '')) # 列rn = int(str(row).replace('I', '')) # 行print(cn, rn)#Entry创建摆放entryedit = Text(root, width=14, height=1)entryedit.place(x=0 + (cn - 1) * 100, y=6 + rn * 20)#treevview值=entry值def saveedit():tree.set(item, column=column, value=entryedit.get(0.0, "end"))entryedit.destroy()okb.destroy()#按钮创建摆放okb = Button(root, text='OK',command=saveedit)okb.place(x=90 + (cn - 1) * 100, y=3 + rn * 20)tree.bind('<Double-1>', set_itemvalue)def newrow():number.append('number')name.append('name')gender.append('gender')score.append('score')rank.append('rank')tree.insert('', len(number) - 1, values=(number[len(number) - 1], name[len(name) - 1],gender[len(gender) - 1], score[len(score) - 1], rank[len(rank) - 1]))tree.update()newb.place(x=200, y=(len(number) - 1) * 20 + 45)newb.update()newb = Button(root, text='新建', width=10, command=newrow)
newb.place(x=200, y=(len(number) - 1) * 20 + 45)
'''
#排序部分2:
for col in columns:  # 绑定函数,使表头可排序tree.heading(col, text=col, command=lambda _col=col: treeviewrank(tree, _col, False))
'''
def delcontent():items = tree.get_children()for item in items:tree.delete(item)Button(root,text='删除列表内容',command=delcontent).pack()def showcontent(event):for num in tree.selection():numname = tree.item(num, "values")from tkinter import messageboxmessagebox.showinfo(title=None,message=numname[1])tree.bind('<ButtonRelease-1>', showcontent)
'''附加1:
# 1.遍历表格
t = treeview.get_children()
for i in t:print(treeview.item(i,'values'))
# 2.绑定单击离开事件
def treeviewClick(event):  # 单击for item in tree.selection():item_text = tree.item(item, "values")print(item_text[0:2])  # 输出所选行的第一列的值
tree.bind('<ButtonRelease-1>', treeviewClick)  
'''tree1=ttk.Treeview(root)
tree1.pack()
#参数:parent, index, id=None, **kw (父节点,排序,id不能相同,显示出的文本)
subtree1=tree1.insert("",0,id="100",text='中国China',values=("1")) # ""表示父节点是根
tree1.insert(subtree1,0,id="101",text="中国北京",values=("3")) # text表示显示出的文本,values是隐藏的值
tree1.insert(subtree1,1,id="102",text="中国河北",values=("3"))
tree1.insert(subtree1,2,id="103",text="中国上海",values=("3"))
tree1.insert(subtree1,3,id="104",text="中国广州",values=("3"))
subtree2=tree1.insert("",1,id="200",text="美国USA",values=("4"))
tree1.insert(subtree2,0,id="201",text="美国加州",values=("5"))root.mainloop()

 

这篇关于控件之ttk.Treeview表格、树状数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073891

相关文章

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

MySQL数据脱敏的实现方法

《MySQL数据脱敏的实现方法》本文主要介绍了MySQL数据脱敏的实现方法,包括字符替换、加密等方法,通过工具类和数据库服务整合,确保敏感信息在查询结果中被掩码处理,感兴趣的可以了解一下... 目录一. 数据脱敏的方法二. 字符替换脱敏1. 创建数据脱敏工具类三. 整合到数据库操作1. 创建服务类进行数据库

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒