立即學習: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()#將窗體類實例化