[英]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.