立即学习:https://edu.csdn.net/course/play/19711/343120?utm_source=blogtoedu
1.树状结构Treeview:分为树状折叠式列表和列表显示,是一种很重要数据列表展示的形式
2.树状列表建立步骤:
1)创建一个树状列表:在这里可以设置显示的窗体和列的名称
self.treeview = tkinter.ttk.Treeview(self.root,#树状结构需要显示的窗体columns = ("mid","name"),#设置树状列表中列的名称,将所有列名称用一个元组表示)
2)设置列表中的列的标题
self.treeview.heading(column = "mid",text = "编号")
3)设置列表中列的布局
self.treeview.column("mid",width = 100,anchor = "w")
4)向列表中插入父级数据
self.level_a = self.treeview.insert(parent = "",#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第一个父级数据",#设置一条数据的标题,可以理解为是行标题values = ("父级1列1","父级1列2") #为每一条数据中对应的列设置相应的值,用元组表示)
5)在父级数据下插入子级数据
self.level_a1 = self.treeview.insert(parent = self.level_a,#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第一条子级数据",#设置一条数据的标题,可以理解为是行标题values = ("父1子1列1","父1子1列2") #为每一条数据中对应的列设置相应的值,用元组表示)
6)树状结构列表的显示
self.treeview.pack(anchor = "w",fill = "x")#树状列表的显示,并且使其在x轴方向进行填充
3.其他的用法
1)树状结构列表事件的绑定
self.treeview.bind("<Double-Button-1>",self.treeview_handle)
2)事件的定义(包含如何获得列表数据)
def treeview_handle(self,event):for index in self.treeview.selection():#获得选中项的索引,返回一个列表或者元组,因此相应for循环取出values= self.treeview.item(index,"values")#根据索引获得索引项的数据,数据是以一个元组的形式返回,包含一条信息info = "编号:%s、职位:%s"%valuestkinter.messagebox.showinfo(title = "您选中的列表信息",#设置弹出窗口的标题message = info#设置在弹出窗体需要弹出的信息)
4.完整代码
1)树状折叠列表
import tkinter#导入创建窗体的相关模块
import os
import tkinter.ttkimage_path = r'C:\Users\jinlin\Desktop\python_further_study\GUI编程\resources' + os.sep + 'linlianqin.gif'#因为每个平台的分隔符不一样,所以用os.sep可以自动切换到相应平台的分隔符class Mainwindow():#创建窗口类def __init__(self):self.root = tkinter.Tk()#创建主体窗口self.root.title('linlianqin')#定义窗体的名字self.root.geometry('500x600')#定义窗体的初始大小self.root.maxsize(1200,1200)#设置窗口可以显示的最大尺寸self.tree()#树结构显示self.root.mainloop()#显示窗口,这个代码一定要放在所有窗口设置的后面#-----------------创建树状列表-----------------------def tree(self):# -----------------创建树状列表-----------------------self.treeview = tkinter.ttk.Treeview(self.root,#树状结构需要显示的窗体columns = ("mid","name"),#设置树状列表中列的名称,将所有列名称用一个元组表示)# ----------------为列表中指定名称的列设置列的标题----------------self.treeview.heading(column = "mid",text = "编号")self.treeview.heading(column = "name",text = "职位")# ---------------------为列表中指定名称的列进行布局设置------------------self.treeview.column("mid",width = 100,anchor = "w")self.treeview.column("name",width = 100,anchor = "w")#为列表中指定名称的列进行布局设置#-----------------------为列表插入数据,.一行表示一条插入的数据---------------------self.level_a = self.treeview.insert(parent = "",#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第一个父级数据",#设置一条数据的标题,可以理解为是行标题values = ("父级1列1","父级1列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_b = self.treeview.insert(parent = "",#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第二个父级数据",#设置一条数据的标题,可以理解为是行标题values = ("父级2列1","父级2列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_c = self.treeview.insert(parent = "",#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第三个父级数据",#设置一条数据的标题,可以理解为是行标题values = ("父级3列1","父级3列2") #为每一条数据中对应的列设置相应的值,用元组表示)#----------------为父级数据添加子类数据----------------------self.level_a1 = self.treeview.insert(parent = self.level_a,#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第一条子级数据",#设置一条数据的标题,可以理解为是行标题values = ("父1子1列1","父1子1列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_a11 = self.treeview.insert(parent = self.level_a1,#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第一条孙级数据",#设置一条数据的标题,可以理解为是行标题values = ("父1子1孙1列1","父1子1孙1列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_a11 = self.treeview.insert(parent = self.level_a1,#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第二条孙级数据",#设置一条数据的标题,可以理解为是行标题values = ("父1子1孙2列1","父1子1孙2列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_a2 = self.treeview.insert(parent = self.level_a,#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第二条子级数据",#设置一条数据的标题,可以理解为是行标题values = ("父1子2列1","父1子2列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_b1 = self.treeview.insert(parent = self.level_b,#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第一条子级数据",#设置一条数据的标题,可以理解为是行标题values = ("父2子1列1","父2子2列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.treeview.pack(anchor = "w",fill = "x")#树状列表的显示,并且使其在x轴方向进行填充if __name__ == '__main__':Mainwindow()#将窗体类实例化
2)树状非折叠列表
import tkinter#导入创建窗体的相关模块
import os
import tkinter.ttk
import tkinter.messageboximage_path = r'C:\Users\jinlin\Desktop\python_further_study\GUI编程\resources' + os.sep + 'linlianqin.gif'#因为每个平台的分隔符不一样,所以用os.sep可以自动切换到相应平台的分隔符class Mainwindow():#创建窗口类def __init__(self):self.root = tkinter.Tk()#创建主体窗口self.root.title('linlianqin')#定义窗体的名字self.root.geometry('500x600')#定义窗体的初始大小self.root.maxsize(1200,1200)#设置窗口可以显示的最大尺寸self.tree()#树结构显示self.root.mainloop()#显示窗口,这个代码一定要放在所有窗口设置的后面#-----------------创建树状列表-----------------------def tree(self):# -----------------创建树状列表-----------------------self.treeview = tkinter.ttk.Treeview(self.root,#树状结构需要显示的窗体columns = ("mid","name"),#设置树状列表中列的名称,将所有列名称用一个元组表示show = "headings"#将有标题的列顶格显示,即不会显示行标题)# ----------------为列表中指定名称的列设置列的标题----------------self.treeview.heading(column = "mid",text = "编号")self.treeview.heading(column = "name",text = "职位")# ---------------------为列表中指定名称的列进行布局设置------------------self.treeview.column("mid",width = 100,anchor = "w")self.treeview.column("name",width = 100,anchor = "w")#为列表中指定名称的列进行布局设置#-----------------------为列表插入数据,.一行表示一条插入的数据---------------------self.level_a = self.treeview.insert(parent = "",#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加# text = "第一个父级数据",#设置一条数据的标题,可以理解为是行标题values = ("父级1列1","父级1列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_b = self.treeview.insert(parent = "",#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加# text = "第二个父级数据",#设置一条数据的标题,可以理解为是行标题values = ("父级2列1","父级2列2") #为每一条数据中对应的列设置相应的值,用元组表示)self.level_c = self.treeview.insert(parent = "",#指定父级数据index = "end",#设置添加的位置,这里设置的是在当前数据的后面进行添加text = "第三个父级数据",#设置一条数据的标题,可以理解为是行标题values = ("父级3列1","父级3列2") #为每一条数据中对应的列设置相应的值,用元组表示)#---------------------为树状列表绑定事件-----------------------------------self.treeview.bind("<Double-Button-1>",self.treeview_handle)self.treeview.pack(anchor = "w",fill = "x")#树状列表的显示,并且使其在x轴方向进行填充#---------------------定义树状列表相应处理的事件-------------------------def treeview_handle(self,event):for index in self.treeview.selection():#获得选中项的索引,返回一个列表或者元组,因此相应for循环取出values= self.treeview.item(index,"values")#根据索引获得索引项的数据,数据是以一个元组的形式返回,包含一条信息info = "编号:%s、职位:%s"%valuestkinter.messagebox.showinfo(title = "您选中的列表信息",#设置弹出窗口的标题message = info#设置在弹出窗体需要弹出的信息)if __name__ == '__main__':Mainwindow()#将窗体类实例化