Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在tkinter中树视图中for循环的每个父节点下添加子节点_Python_Mysql_Tkinter_Treeview_Ttk - Fatal编程技术网

Python 在tkinter中树视图中for循环的每个父节点下添加子节点

Python 在tkinter中树视图中for循环的每个父节点下添加子节点,python,mysql,tkinter,treeview,ttk,Python,Mysql,Tkinter,Treeview,Ttk,我正在尝试制作一个树视图,它显示来自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', i

我正在尝试制作一个树视图,它显示来自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')]
正如我们在我的树视图中看到的,在class1、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,
记录第一个数据库中的值

完整示例

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', 26, 25, 22],
    [9, 'Enshean', 'E(!', 23, 26, 29],
    [12, 'Ian', '%^&67HN', 23, 25, 26],
    [13, 'Ludwig', 'Beethoven', 23, 26, 29],
    [14, 'Wolfgang', 'Mozart', 23, 24, 26],
    [19, 'Joseph', 'Haydn', 23, 26, 27],
    [20, 'Enshean', '@&V', 23, 26, 29],
    [21, 'Enshean', 'L^&', 23, 26, 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, 'end', values=('',)*3 + tuple(dic[record[i]] for i in range(3,6)))  # subitem using second database

root.mainloop()    

你可以把你的列表变成一个口述:{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,
记录第一个数据库中的值

完整示例

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', 26, 25, 22],
    [9, 'Enshean', 'E(!', 23, 26, 29],
    [12, 'Ian', '%^&67HN', 23, 25, 26],
    [13, 'Ludwig', 'Beethoven', 23, 26, 29],
    [14, 'Wolfgang', 'Mozart', 23, 24, 26],
    [19, 'Joseph', 'Haydn', 23, 26, 27],
    [20, 'Enshean', '@&V', 23, 26, 29],
    [21, 'Enshean', 'L^&', 23, 26, 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, 'end', values=('',)*3 + tuple(dic[record[i]] for i in range(3,6)))  # subitem using second database

root.mainloop()