[英]My Tkinter code for displaying every field from a database isn't displaying in the tkinter widget
我有一个后端文件和一个前端文件,我想要它,以便对视图函数来说,它查询数据库并将每行(在新行中)输出到Listbox小部件。
如何编辑我的代码,使其成为1)输出到“列表框”小部件而不是打印到控制台中,以及2)将“数据库”行中的每个数据库行输出到新行?
我似乎无法弄清楚,也找不到任何资源。
谢谢
这是我的后端代码:
def connect():
conn=sqlite3.connect('Orders.db')
cur=conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS stuffToPlot(Reference REAL, Date TEXT, Name TEXT, SubTotal REAL, VAT REAL, Total REAL)")
conn.commit()
conn.close()
def view():
conn = sqlite3.connect('Orders.db')
cur = conn.cursor()
cur.execute("SELECT * FROM stuffToPlot")
rows=cur.fetchall()
conn.close()
print (rows)
这是我的前端代码:
from tkinter import *
from backend import hello
from backend import connect
from backend import insert
from backend import view
from backend import search
window = Tk()
l1=Label(window, text ="Order Reference ID")
l1.grid(row=0,column=0)
l1=Label(window, text ="Date")
l1.grid(row=0,column=2)
l1=Label(window, text ="Name")
l1.grid(row=1,column=0)
l1=Label(window, text ="SubTotal")
l1.grid(row=1,column=2)
l1=Label(window, text ="VAT")
l1.grid(row=2,column=0)
l1=Label(window, text ="Total Cost")
l1.grid(row=2,column=2)
referenceID_text=StringVar()
e1=Entry(window,textvariable=referenceID_text)
e1.grid(row=0,column=1)
date_text=StringVar()
e2=Entry(window,textvariable=date_text)
e2.grid(row=0,column=3)
name_text=StringVar()
e3=Entry(window,textvariable=name_text)
e3.grid(row=1,column=1)
subtotal_text=StringVar()
e4=Entry(window,textvariable=subtotal_text)
e4.grid(row=1,column=3)
vat_text=StringVar()
e3=Entry(window,textvariable=vat_text)
e3.grid(row=2,column=1)
total_text=StringVar()
e4=Entry(window,textvariable=total_text)
e4.grid(row=2,column=3)
list1=Listbox(window, height=6,width=35)
list1.grid(row=2,column=0,rowspan=6,columnspan=2)
#Attatch scrollbar
sb1=Scrollbar(window)
sb1.grid(row=2,column=2,rowspan=6)
list1.configure(yscrollcommand=sb1.set)
sb1.configure(command=list1.yview)
#Define buttons
b1=Button(window,text="View All", width=15, command=lambda: view())
b1.grid(row=3,column=3)
b1=Button(window,text="Search Entry", width=15, command=lambda: search())
b1.grid(row=4,column=3)
b1=Button(window,text="Close", width=15)
b1.grid(row=5,column=3)
b1=Button(window,text="Add Entry", width=15, command=lambda: insert())
b1.grid(row=6,column=3)
b1=Button(window,text="Delete Selected", width=15, command=lambda: delete())
b1.grid(row=7,column=3)
connect()
window.mainloop()
一种简单的方法是insert
查询返回的行直接insert
到Listbox
小部件中。
首先更改函数view
以返回rows
:
def view():
conn = sqlite3.connect('Orders.db')
cur = conn.cursor()
cur.execute("SELECT * FROM stuffToPlot")
rows=cur.fetchall()
conn.close()
return rows
然后创建另一个循环遍历结果的函数以将其插入:
def insert_rows():
for row in view():
list1.insert(END, row)
b1=Button(window,text="View All", width=15, command=lambda: insert_rows())
现在,如果您想要更好的输出值,则可以使用以下语法来格式化字符串:
list1.insert(END, '{} {} {} {} {} Total : {}'.format(*row))
(只需在查询中命名字段即可确定其顺序)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.