我如何在使用 python 从 Mysql table 获取的 Tkinter 树视图中显示数据
how can i display data in Tkinter treeview fetched from Mysql table using python
我已经使用 treeview 创建了一个 table,我想插入从 mysql table.if 中获取的数据,任何人都可以帮助我,因为我已经尽力了,但是仍然在 vain.with 这条语句 tree.insert("", 1, text=2, values=("name", "5", "5"))
可以插入井数据但不能从数据库中插入数据,但我想从数据库中获取并显示它。
这是我试过的代码,但它有 failed.please 帮助。
`
from Tkinter import *
import ttk
import MySQLdb
root = Tk()
root.geometry("320x240")
tree = ttk.Treeview(root)
conn = MySQLdb.connect("localhost", "root", "drake", "OSCAR")
cursor = conn.cursor()
tree["columns"] = ("one", "two", "three")
tree.column("one", width=100)
tree.column("two", width=100)
tree.column("three", width=100)
tree.heading("#0", text='ID', anchor='w')
tree.column("#0", anchor="w")
tree.heading("one", text="NAME")
tree.heading("two", text="VOTES")
tree.heading("three", text="PERSENTAGE")
for i in range(1, 6):
cursor.execute("""select name from president where ID =%s""", (i,))
nm = cursor.fetchone()[0]
cursor.execute("""select votes from president where ID =%s""", (i,))
vot = cursor.fetchone()[0]
cursor.execute("""select percentage from president where ID =%s""",(i,))
percent = cursor.fetchone()[0]
tree.insert("", i, text=i, values=(nm, vot, percent)),
tree.pack()
root.mainloop()
`
iv 使用 sqlite3 而不是 MySQL 但我假设从 sql 返回的值被放入一个多维数组中,这些数组需要超过一个索引例如
array[0][1]
下面的代码用于修改树
for i in self.tree.get_children():
self.tree.delete(i) #clears current values from tree
for student in StudentList:
self.tree.insert("" , 0,values=(student[0],student[1])
#the index used would depend on what you want to be put into the tree
#only uses one index per value instead of two as the for loop changes the first index
请注意,这是从我的课程作业(预订系统)中复制的,因此使用了名称
要解决您的问题,首先您需要使用此查询读取数据库的所有行:
SELECT * FROM president
你需要执行的:
cursor.execute("""SELECT * FROM president""")
现在,只需遍历行并将它们一一插入 tree
:
更新:
我想你的 table 结构是这样的:
ID | name | votes | percentage
所以你可以运行这个:
cpt = 0 # Counter representing the ID of your code.
for row in cursor:
# I suppose the first column of your table is ID
tree.insert('', 'end', text=str(cpt), values=(row[1], row[2], row[3]))
cpt += 1 # increment the ID
我已经使用 treeview 创建了一个 table,我想插入从 mysql table.if 中获取的数据,任何人都可以帮助我,因为我已经尽力了,但是仍然在 vain.with 这条语句 tree.insert("", 1, text=2, values=("name", "5", "5"))
可以插入井数据但不能从数据库中插入数据,但我想从数据库中获取并显示它。
这是我试过的代码,但它有 failed.please 帮助。
`
from Tkinter import *
import ttk
import MySQLdb
root = Tk()
root.geometry("320x240")
tree = ttk.Treeview(root)
conn = MySQLdb.connect("localhost", "root", "drake", "OSCAR")
cursor = conn.cursor()
tree["columns"] = ("one", "two", "three")
tree.column("one", width=100)
tree.column("two", width=100)
tree.column("three", width=100)
tree.heading("#0", text='ID', anchor='w')
tree.column("#0", anchor="w")
tree.heading("one", text="NAME")
tree.heading("two", text="VOTES")
tree.heading("three", text="PERSENTAGE")
for i in range(1, 6):
cursor.execute("""select name from president where ID =%s""", (i,))
nm = cursor.fetchone()[0]
cursor.execute("""select votes from president where ID =%s""", (i,))
vot = cursor.fetchone()[0]
cursor.execute("""select percentage from president where ID =%s""",(i,))
percent = cursor.fetchone()[0]
tree.insert("", i, text=i, values=(nm, vot, percent)),
tree.pack()
root.mainloop()
`
iv 使用 sqlite3 而不是 MySQL 但我假设从 sql 返回的值被放入一个多维数组中,这些数组需要超过一个索引例如
array[0][1]
下面的代码用于修改树
for i in self.tree.get_children():
self.tree.delete(i) #clears current values from tree
for student in StudentList:
self.tree.insert("" , 0,values=(student[0],student[1])
#the index used would depend on what you want to be put into the tree
#only uses one index per value instead of two as the for loop changes the first index
请注意,这是从我的课程作业(预订系统)中复制的,因此使用了名称
要解决您的问题,首先您需要使用此查询读取数据库的所有行:
SELECT * FROM president
你需要执行的:
cursor.execute("""SELECT * FROM president""")
现在,只需遍历行并将它们一一插入 tree
:
更新:
我想你的 table 结构是这样的:
ID | name | votes | percentage
所以你可以运行这个:
cpt = 0 # Counter representing the ID of your code.
for row in cursor:
# I suppose the first column of your table is ID
tree.insert('', 'end', text=str(cpt), values=(row[1], row[2], row[3]))
cpt += 1 # increment the ID