微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在tkinter的treeview中的for循环的每个父节点下添加子节点

如何解决在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 举报,一经查实,本站将立刻删除。