【发布时间】:2015-05-28 20:39:31
【问题描述】:
大家好,我正在尝试制作一个应用程序,该应用程序从一些 tkinter 输入框中获取数据,并将它们添加到数据库中,并将它们显示在 tktreectrl 的多列表框中。我尝试用来向数据库添加内容的代码是基于各种在线教程,但是所做的只是在数据库的最后一列中添加一个 0。即使我使用 DB Browser 将值放入数据库,它们仍然不会显示在多列表框中。 (这里是完整代码)
#Import Modules
import tkinter
import TkTreectrl
import sqlite3
#Database
db = sqlite3.connect("marks.db")
cursor=db.cursor()
print("Opened Database")
db.execute("CREATE TABLE IF NOT EXISTS marks (Firstname, Surname, Mark)")
print("Table created")
#Variables
Surname = str()
Firstname = str()
Mark = int()
#Define Buttons
def addentry() :
db.execute('INSERT INTO marks VALUES (?,?,?);', (Firstname,Surname,Mark))
db.commit()
print ("Entry Added To Database")
def deleteentry() :
selected=listbox.get(ACTIVE)
name=selected[0]
db.execute('DELETE FROM marks where Firstname =?', (name))
print ("Entry Deleted")
#Window
window = tkinter.Tk()
window.title("marks")
window.geometry("875x500")
#Labels
lbl_surname = tkinter.Label(window, text="Surname:", font="Arial 12 bold")
lbl_first = tkinter.Label(window, text="First-Name:", font="Arial 12 bold")
lbl_mark = tkinter.Label(window, text="Mark (Percentage):", font="Arial 12 bold")
#Entry
txt_surname = tkinter.Entry(window, textvariable=Surname)
txt_first = tkinter.Entry(window, textvariable=Firstname)
txt_mark = tkinter.Entry(window, textvariable=Mark)
#Button
but_save = tkinter.Button(window, text="Save", command= addentry, width=10)
but_delete = tkinter.Button(window, text="Delete", command=deleteentry, width=10)
#List
listbox = TkTreectrl.MultiListbox(window)
listbox.config(columns=('Firstname', 'Surname', ' Mark'))
cursor.execute('SELECT * from marks')
for row in cursor.fetchall():
listbox.insert('end',*map(unicode,row))
#Grid
lbl_surname.grid(row=0, column=1, padx=100)
lbl_first.grid(row=0, column=0)
lbl_mark.grid(row=0, column=2)
txt_surname.grid(row=1, column=1, padx=110)
txt_first.grid(row=1, column=0, padx=10)
txt_mark.grid(row=1, column=2)
but_save.grid(row=0, column=3)
but_delete.grid(row=1, column=3)
listbox.grid(row=2)
#Render
window.mainloop()
任何想法 关于我做错了什么
谢谢克里斯
【问题讨论】:
-
您是否验证了
Firstname、Surname和Mark在您进行提交时实际上具有值?您是否已验证fetchall()实际上返回的是非空结果? -
Firstname 等似乎没有值。那么我将如何去做,所以我认为你可以使用条目小部件的文本变量,但是为了检索输入框的内容,我还需要做些什么吗?
-
是的,您可以使用 text 变量。如果没有看到你的代码,我不可能猜到你做错了什么。
-
条目小部件的代码是: txt_surname = tkinter.Entry(window, textvariable=Surname) 这对于其他条目也是一样的,显然只是文本变量不同。
-
华夫饼,那是额外的一行代码根本没有帮助。如果您想添加更多代码,请编辑问题并添加完整的工作程序(也称为 MCVE:stackoverflow.com/help/mcve
标签: python-3.x sqlite tkinter