我正在使用sqlite3和tkinter在python中创建一个数据库。这是我第一次做这样的事情,所以我一直在互联网上使用示例来帮助构建它。这在大多数情况下是有效的,但是现在我需要能够在表格中显示数据库中的数据,而我使用的示例似乎对我来说似乎不正常。我已经尝试过查找其他解决方案,但似乎没有任何帮助。
问题在于,当我打开桌子时,它不会被创建。该程序只是打开一个新窗口,然后离开它。没有错误,所以我不知道到底出了什么问题。
这是我到目前为止创建的完整代码:
from tkinter import *
import sqlite3
con = sqlite3.connect('test.db')
cur = con.cursor()
class Welcome():
def __init__(self,master):
self.master = master
self.master.geometry('170x110+100+200')
self.master.title('Welcome!')
self.label1=Label(self.master,text='Test Database Main Menu',fg='red').grid(row=0,column=1)
self.button1=Button(self.master,text="Enter Data",fg='green',command=self.gotodataentry).grid(row=1,column=1)
self.button2=Button(self.master,text="Data Records",fg='blue',command=self.gotorecords).grid(row=2,column=1)
self.button3=Button(self.master,text="Exit",fg='red',command=self.exit).grid(row=3,column=1)
def exit(self):
self.master.destroy()
def gotodataentry(self):
root2=Toplevel(self.master)
myGUI=DataEntry(root2)
def gotorecords(self):
root2=Toplevel(self.master)
mygui=Records(root2)
class DataEntry():
def __init__(self,master):
self.master = master
self.master.geometry('250x200+100+200')
self.master.title('Data Entry')
self.label2=Label(self.master,text='Welcome to the data entry menu',fg='red').grid(row=0,column=0)
self.label3=Label(self.master,text='Please enter some text',fg='black').grid(row=3,column=0)
self.label4=Label(self.master,text='Please enter a number',fg='black').grid(row=4,column=0)
self.text1=StringVar()
self.text_entry=Entry(self.master,textvariable=self.text1).grid(row=3,column=1)
self.int1=IntVar()
self.int_entry=Entry(self.master,textvariable=self.int1).grid(row=4,column=1)
self.button4=Button(self.master,text="Save",fg='red',command=lambda: self.savedata(self.text1.get(), self.int1.get())).grid(row=7,column=0)
self.button5=Button(self.master,text="Exit",fg='red',command=self.exit).grid(row=9,column=0)
def exit(self):
self.master.destroy()
def savedata(self, text1, int1):
con = sqlite3.connect('test.db')
cur = con.cursor()
cur.execute('INSERT INTO Data (t1, i1) VALUES (?,?)', (text1, int1))
con.commit()
print('Record inserted in Data')
def Records(self):
def __init__(self, master):
self.master = master
self.master.geometry('250x200+100+200')
self.master.title('Records')
self.connection = sqlite3.connect('test.db')
self.cur = self.connection.cursor()
self.textLabel = Label(self.master, text="Text", width=10)
self.textLabel.grid(row=0, column=0)
self.intLabel = Label(self.master, text="Number", width=10)
self.intLabel.grid(row=0, column=1)
self.showallrecords()
def showallrecords(self):
Data = self.readfromdatabase()
for index, dat in enumerate(Data):
Label(self.master, text=dat[0]).grid(row=index+1, column=0)
Label(self.master, text=dat[1]).grid(row=index+1, column=1)
def readfromdatabase(self):
self.cur.execute("SELECT * FROM Data")
return self.cur.fetchall()
def main():
root=Tk()
myGUIWelcome=Welcome(root)
root.mainloop()
if __name__ == '__main__':
main()
这是我正在努力的部分:
def Records(self):
def __init__(self, master):
self.master = master
self.master.geometry('250x200+100+200')
self.master.title('Records')
self.connection = sqlite3.connect('test.db')
self.cur = self.connection.cursor()
self.textLabel = Label(self.master, text="Text", width=10)
self.textLabel.grid(row=0, column=0)
self.intLabel = Label(self.master, text="Number", width=10)
self.intLabel.grid(row=0, column=1)
self.showallrecords()
def showallrecords(self):
Data = self.readfromdatabase()
for index, dat in enumerate(Data):
Label(self.master, text=dat[0]).grid(row=index+1, column=0)
Label(self.master, text=dat[1]).grid(row=index+1, column=1)
def readfromdatabase(self):
self.cur.execute("SELECT * FROM Data")
return self.cur.fetchall()
有人可以帮我弄清楚出了什么问题吗?很抱歉,如果解决方案非常简单,就像我说这是我第一次做这样的事情。
答案 0 :(得分:1)
你是对的,解决方案非常简单:D
更改
def Records(self):
要
class Records:
代码完美无缺