簡體   English   中英

我的Tkinter代碼顯示數據庫中的每個字段都沒有顯示在tkinter小部件中

[英]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查詢返回的行直接insertListbox小部件中。

首先更改函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM