0
我在使用sqlite3和tkinter的python中創建數據庫。這是我第一次做這樣的事情,所以我一直在使用互聯網上的例子來幫助構建它。這在大多數情況下都有效,但是現在我需要能夠在數據庫中顯示數據中的數據,而我使用的示例似乎對我而言並不正確。我試過尋找其他解決方案,但似乎沒有任何幫助。在TKinter中顯示來自數據庫的數據的問題
問題是,當我打開表格時,它不會被創建。該程序只是打開一個新窗口,然後離開它。沒有錯誤,所以我不知道到底發生了什麼問題。
這是我創建至今的全部代碼:
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()
可能有人請幫我找出什麼是錯的?對不起,如果解決方案非常簡單,就像我說這是我第一次做這樣的事情。
謝謝!正如你所說,現在它完美運作。 –
沒問題! (如果你按下綠色的勾號標記它是正確的) –