【发布时间】:2021-04-10 13:34:58
【问题描述】:
我想在 tkinter 表上显示 sqlite 数据库,当我添加新数据时,我需要再次运行程序,然后新的数据会显示在表上。
如何编辑代码以将新数据与旧数据一起显示而无需再次运行数据?我知道可以使用.after() 或.update() 但不知道在哪里添加?
例如:(原始表格显示)
1
2
当我单击按钮“添加”时添加新数据“3”时,我想在表格上显示它
1
2
3
这是完整的代码,谢谢帮助!
from tkinter import *
import tkinter as tk
import sqlite3
def add():
b1 = Button(window,text = "Add",bg="lightblue",fg = "black",command=clicked)
b1.grid(column=0,row=0)
window.mainloop()
def clicked():
def new():
import sqlite3 #create new customer
conn = sqlite3.connect('d:\\hw4.db')
cursor = conn.cursor()
name1=e_name.get()
gender1=e_ged.get()
birth1=e_bir.get()
sql="insert into ss (name,gender,birth) values ('"+name1+"','"+gender1+"','"+birth1+"')"
cursor.execute(sql)
conn.commit()
conn.close()
top.destroy()
top = Toplevel()
top.title("New")
#1
name=Label(top,text="Name: ").grid(column=3,row=0,sticky='w')
e_name=StringVar()
e_name=Entry(top,text=e_name)
e_name.grid(column=4,row=0)
#2
name=Label(top,text="Gender: ").grid(column=3,row=1,sticky='w')
e_ged=StringVar()
e_ged=Entry(top,text=e_ged)
e_ged.grid(column=4,row=1)
#3
name=Label(top,text="Birth: ").grid(column=3,row=2,sticky='w')
e_bir=StringVar()
e_bir=Entry(top,text=e_bir)
e_bir.grid(column=4,row=2)
#add
c=Button(top,text="Add",bg='lemonchiffon',fg='black',command=new)
c.grid(column=3,row=4,sticky='w')
top.mainloop()
def main():
frame=Frame(window)
import sqlite3
conn = sqlite3.connect('d:\\hw4.db')
cursor = conn.cursor()
sql = 'select rowid,* from ss'
cursor.execute(sql)
result=cursor.fetchall();
for r in range (len(result)):
rlbls=[None,None,None,None,None,None]
rlbls[0]=Label(frame,text=str(result[r][0]))
rlbls[0].grid(column=0,row=r)
rlbls[1]=Label(frame,text=str(result[r][1]))
rlbls[1].grid(column=1,row=r)
rlbls[2]=Label(frame,text=str(result[r][2]))
rlbls[2].grid(column=2,row=r)
rlbls[3]=Label(frame,text=str(result[r][3]))
rlbls[3].grid(column=3,row=r)
btn1 = Button(window, text="edit")
btn1.grid(column=4, row=r+1)
btn2 = Button(window, text="delete")
btn2.grid(column=5, row=r+1)
#show
conn=sqlite3.connect('d:\\hw4.db')
c = conn.cursor()
r = conn.execute('''SELECT * from ss''');
i =1
for n in r:
for j in range(len(n)):
e=Label(window,text=n[j])
e.grid(column=j,row=i)
i=i+1
conn.commit()
conn.close()
return frame
window = Tk()
window.title("add")
window.geometry('200x200')
main()
add()
【问题讨论】:
-
您可以添加一个更新按钮,它只会刷新删除值并插入新值。此外,您的 SQL 查询容易受到 SQL 注入。
-
在 clicked() 函数中,我使用“添加”按钮添加新数据,我可以使用相同的按钮刷新表格吗?
-
给定代码的
clicked()函数中没有添加按钮。 -
-
对不起,我完全失明了:p。我认为你应该在这里重新考虑你的设计。代码结构对我来说似乎很奇怪。但无论如何,基本思想是创建一个删除现有值然后插入新获取的值的函数。您可以等待更好的建议。