Python 如何在tkinter treeview中输出sqlite3数据
我对如何将myPython 如何在tkinter treeview中输出sqlite3数据,python,tkinter,sqlite,treeview,Python,Tkinter,Sqlite,Treeview,我对如何将mysqlite3db中的所有记录输出到tkinter treeview中存在问题。它只输出db中的最后一条记录,而且这些记录也不会出现在为其指定的列中。print方法将所有db记录打印到我的终端,但不会输出所有记录记录到treeview小部件 我们欢迎您的建议来实现这一目标 from tkinter import ttk import tkinter as tk import sqlite3 def connect(): conn = sqlite3.connect("T
sqlite3
db中的所有记录输出到tkinter treeview
中存在问题。它只输出db
中的最后一条记录,而且这些记录也不会出现在为其指定的列中。print
方法将所有db
记录打印到我的终端,但不会输出所有记录记录到treeview
小部件
我们欢迎您的建议来实现这一目标
from tkinter import ttk
import tkinter as tk
import sqlite3
def connect():
conn = sqlite3.connect("TRIAL.db")
cur = conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS profile(id INTEGER PRIMARY KEY,
First TEXT, Surname TEXT)")
conn.commit()
conn.close()
def View():
conn = sqlite3.connect("TRIAL.db")
cur = conn.cursor()
cur.execute("SELECT * FROM profile")
rows = cur.fetchall()
for row in rows:
print(row) # it print all records in the database
tree.insert("", tk.END, values=row)
conn.close()
connect() # this to create the db
root = tk.Tk()
root.geometry("400x400")
tree= ttk.Treeview(root, column=("column", "colunn1"))
tree.heading("#0", text="NUMBER")
tree.heading("#1", text="FIRST NAME")
tree.heading("#2", text="SURNAME")
tree.pack()
b2 = tk.Button(text="view data", command=View)
b2.pack()
root.mainloop()
代码中有两个问题:
- 第一个是
不在for循环中,因此只有最后一行将插入到treeview中李>tree.insert(“,tk.END,values=row)
- 第二个是列
是一个特殊的列,它的值是用#0
设置的,而不是用text=…
设置的。要正确显示数据,您至少有两种选择:values=(…)
- 第一种方法是将
替换为tree.insert(“,tk.END,values=row)
tree.insert(“,tk.END,text=row[0],values=row[1:])
- 第二种方法是不要使用特殊列
,您不需要它,因为您将树状视图用作表。创建树时,使用选项#0
隐藏列show='headings'
并创建3列:#0
from tkinter import ttk import tkinter as tk import sqlite3 def connect(): conn = sqlite3.connect("TRIAL.db") cur = conn.cursor() cur.execute("CREATE TABLE IF NOT EXISTS profile(id INTEGER PRIMARY KEY, First TEXT, Surname TEXT)") conn.commit() conn.close() def View(): conn = sqlite3.connect("TRIAL.db") cur = conn.cursor() cur.execute("SELECT * FROM profile") rows = cur.fetchall() for row in rows: print(row) # it print all records in the database tree.insert("", tk.END, values=row) conn.close() connect() # this to create the db root = tk.Tk() root.geometry("400x400") tree= ttk.Treeview(root, column=("column1", "column2", "column3"), show='headings') tree.heading("#1", text="NUMBER") tree.heading("#2", text="FIRST NAME") tree.heading("#3", text="SURNAME") tree.pack() b2 = tk.Button(text="view data", command=View) b2.pack() root.mainloop()
- 第一种方法是将
- 第一个是
不在for循环中,因此只有最后一行将插入到treeview中李>tree.insert(“,tk.END,values=row)
- 第二个是列
是一个特殊的列,它的值是用#0
设置的,而不是用text=…
设置的。要正确显示数据,您至少有两种选择:values=(…)
- 第一种方法是将
替换为tree.insert(“,tk.END,values=row)
tree.insert(“,tk.END,text=row[0],values=row[1:])
- 第二种方法是不要使用特殊列
,您不需要它,因为您将树状视图用作表。创建树时,使用选项#0
隐藏列show='headings'
并创建3列:#0
from tkinter import ttk import tkinter as tk import sqlite3 def connect(): conn = sqlite3.connect("TRIAL.db") cur = conn.cursor() cur.execute("CREATE TABLE IF NOT EXISTS profile(id INTEGER PRIMARY KEY, First TEXT, Surname TEXT)") conn.commit() conn.close() def View(): conn = sqlite3.connect("TRIAL.db") cur = conn.cursor() cur.execute("SELECT * FROM profile") rows = cur.fetchall() for row in rows: print(row) # it print all records in the database tree.insert("", tk.END, values=row) conn.close() connect() # this to create the db root = tk.Tk() root.geometry("400x400") tree= ttk.Treeview(root, column=("column1", "column2", "column3"), show='headings') tree.heading("#1", text="NUMBER") tree.heading("#2", text="FIRST NAME") tree.heading("#3", text="SURNAME") tree.pack() b2 = tk.Button(text="view data", command=View) b2.pack() root.mainloop()
- 第一种方法是将
树。insert(“,tk.END,values=row)
不在for循环中。这是问题中的输入错误吗?@j_4321这是代码中的输入错误我看到您创建了一个表,但您是否在选择之前将数据插入该表?@ZackTarr是的记录已退出树。insert(“,tk.END,values=row)
不在for循环中。这是问题中的错别字吗?@j_4321这是代码中的错别字这太神奇了!谢谢你!这太棒了!谢谢你!