如何解决在tkinter的treeview中的for循环的每个父节点下添加子节点
我正在尝试制作一个显示来自MysqL数据库的数据的树状视图。它检索数据,并将其转换为元组列表。我已经创建了一个for循环,可以很好地接收数据并将其放入树状视图中。
count = 0
for record in rows: #forloop adding all the information from data list,no matter how many their are in the list
my_tree.insert(parent='',index='end',iid=count,text='',values=(record[0],record[1],record[2],record[3],record[4],record[5]))
count += 1
但是,我希望每个父节点下的for循环也放置一个子节点。当前的树视图如下所示:
studentid firstname lastname class1 class2 class3
0 5 Ayoung ere 23 29 22
1 6 emma 4343 24 22 25
2 7 John 343G&$ 28 26 27
3 8 Anthony @^b 26 25 22
4 9 Enshean E(! 23 26 29
5 12 Ian %^&67HN 23 25 26
6 13 Ludwig Beethoven 23 26 29
7 14 Wolfgang Mozart 23 24 26
8 19 Joseph Haydn 23 26 27
9 20 Enshean @&V 23 26 29
10 21 Enshean L^& 23 26 29
在列表中的每个人下,将有一个子节点,该子节点将显示从数据库中检索到的另一个列表中的3条信息。列表如下所示:
[(22,'Math','Mr. Rosario','D2'),(23,'Music','Mr. Young','M1'),(24,'Biology','Ms. Marks','C4'),(25,'Chemistry','Mr. Musk','C2'),(26,'Physics','Mr. Walrath','A8'),(27,'Economics','Mr. Sinclair','E12'),(28,'DGT','Mr. Turing','F3'),(29,'English','Mr. Gibson','B5')]
正如我们在树形视图中看到的那样,在类1,2和3下有一个数字,该数字对应于另一个数据库的ID,如上所示。我想要的子节点位于每个类的下面,它将是该类的名称。例如:
studentid firstname lastname class1 class2 class3
0 5 Ayoung ere 23 29 22
> Music English Math
1 6 emma BI$! 24 22 25
> Biology Math Chemistry
很难用语言表达出来,但希望您能理解。尝试将带有相应数据的子节点放在for循环中的每个父节点下的任何帮助将不胜感激。
解决方法
您可以按字典的形式列出您的列表:{number:subject}。
如果您的列表名为rows2
,则可以
dic = {values[0]: values[1] for values in rows2}
然后使用
在树中添加子项tree.insert(count,'end',values=('',)*3 + tuple(dic[record[i]] for i in range(3,6)))
其中count
是项iid,record
是第一个数据库的值。
完整示例
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
columns = ['studentid','firstname','lastname','class1','class2','class3']
tree = ttk.Treeview(root,columns=columns)
for col in columns:
tree.heading(col,text=col)
tree.pack()
# first database
rows = [
[5,'Ayoung','ere',23,29,22],[6,'Emma','4343',24,22,25],[7,'John','343G&$',28,26,27],[8,'Anthony','@^b',25,[9,'Enshean','E(!',29],[12,'Ian','%^&67HN',26],[13,'Ludwig','Beethoven',[14,'Wolfgang','Mozart',[19,'Joseph','Haydn',[20,'@&V',[21,'L^&',29]
]
# second database
rows2 = [
(22,'Math','Mr. Rosario','D2'),(23,'Music','Mr. Young','M1'),(24,'Biology','Ms. Marks','C4'),(25,'Chemistry','Mr. Musk','C2'),(26,'Physics','Mr. Walrath','A8'),(27,'Economics','Mr. Sinclair','E12'),(28,'DGT','Mr. Turing','F3'),(29,'English','Mr. Gibson','B5')
]
# dictionary from second database
dic = {values[0]: values[1] for values in rows2}
# put data in treeview
for count,record in enumerate(rows): #forloop adding all the information from data list,no matter how many their are in the list
tree.insert(parent='',index='end',iid=count,text='',values=(record[0],record[1],record[2],record[3],record[4],record[5])) # data from first database
tree.insert(count,6))) # subitem using second database
root.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。