Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter.filedialog import *
- from tkinter import simpledialog
- from sqlite3 import *
- import time
- class Editor(Frame):
- def __init__(self, root, cursor, conn):
- self.root = root
- self.cursor = cursor
- self.connection = conn
- self.root.title('Program za rad s bazom podataka')
- super().__init__(self.root)
- self.StvoriTablicu()
- self.KreirajSucelje()
- self.UčitajIzBaze()
- mainloop()
- def KreirajSucelje(self):
- self.Naljepnice = {}
- self.Entries = []
- lista_naljepnica = ['Knjiga', 'Autor', 'Žanr', 'Izdavačka kuća', 'Godina izdanja']
- for i in range(len(lista_naljepnica)):
- self.Naljepnice[i] = Label(self, text=lista_naljepnica[i])
- self.Naljepnice[i].grid(row=1, column=i)
- # tekst okviri
- entry = Entry(self)
- entry.grid(row=2, column=i)
- self.Entries.append(entry)
- #novi entry i gumb za brisanje
- self.a=Button(self, text='Izbriši',command=lambda: self.Izbriši())
- self.a.grid(row=5, column=5)
- self.b=Entry(self)
- self.b.grid(row=5,column=4)
- self.UnesiGumb = Button(self, text='Unesi', command=lambda: (self.UnesiUBazu(), self.UčitajIzBaze()))
- self.UnesiGumb.grid(row=2, column=len(lista_naljepnica))
- self.pack(fill=BOTH, expand=True)
- self.Labela = Label(self.root, text='Dobrodošli')
- self.Labela.pack(fill=BOTH, expand=True)
- # trake za pomicanje
- self.T = Text(self.root, wrap=NONE, spacing1=5)
- self.T.pack(fill=BOTH, expand=True)
- ys = Scrollbar(self.root, orient=VERTICAL)
- ys.pack(side=RIGHT, fill=Y)
- xs = Scrollbar(self.root, orient=HORIZONTAL)
- xs.pack(side=BOTTOM, fill=X)
- self.DBName = Label(self.root, text='Trenutna baza podataka: '+ os.path.dirname(__file__) + '/inital_datebase.db')
- self.DBName.pack(fill=BOTH, expand=True)
- self.T.configure(xscrollcommand=xs.set, yscrollcommand=ys.set)
- ys.configure(command=self.T.yview)
- xs.configure(command=self.T.xview)
- # izbornici
- mB = Menu(self.root)
- mD = Menu(mB, tearoff=1)
- mD.add_command(label='Nova baza', underline=0, accelerator='Ctrl+N', command=lambda: self.NovaBaza())
- mD.add_command(label='Učitaj bazu', underline=0, accelerator='Ctrl+N', command=lambda: self.UčitajBazu())
- mD.add_separator()
- mD.add_command(label='Završi rad', underline=0, accelerator='Ctrl+Q', command=lambda: self.Kraj())
- mB.add_cascade(menu=mD, label='Upravljanje')
- uM = Menu(mB, tearoff=1)
- uM.add_command(label='Knjiga', underline=0, command=lambda: self.UčitajIzBaze('Knjiga'))
- uM.add_command(label='Autor', underline=0, command=lambda: self.UčitajIzBaze('Autor'))
- uM.add_command(label='Žanr', underline=0, command=lambda: self.UčitajIzBaze('Žanr'))
- uM.add_command(label='IzdavačkaKuća', underline=0, command=lambda: self.UčitajIzBaze('IzdavačkaKuća'))
- uM.add_command(label='GodinaIzdanja', underline=0, command=lambda: self.UčitajIzBaze('GodinaIzdanja'))
- mB.add_cascade(menu=uM, label='Sortiraj')
- self.root.config(menu=mB)
- def Izbriši(self):
- upit='''DELETE FROM Knjige WHERE Knjiga=={}'''.format(self.b.get())
- self.cursor.execute(upit)
- self.connection.commit()
- def NovaBaza(self):
- answer = simpledialog.askstring("Input", "Ime baze (.db format)",
- parent=self.root)
- if answer is None: return # ako nista korisnik ne unese
- # neispravno ime za bazu
- if answer[-3:] != '.db':
- self.Obavijest('Krivi format imena baze!', 'red')
- return
- # ako je ispravno ime za bazu
- # zatvaramo inicijalnu bazu
- self.connection.commit()
- self.connection.close()
- self.cursor = ''
- # otvaramo novu
- self.connection = connect(answer)
- self.cursor = self.connection.cursor()
- self.Obavijest('Nova baza napravljena!', 'green')
- self.StvoriTablicu()
- self.DBName.configure(text=('Trenutna baza podataka: ' + os.path.dirname(__file__) + '/' + answer))
- self.UčitajIzBaze()
- def UčitajBazu(self):
- fname = askopenfilename(filetypes=[('Datoteke SQL', '*.db')], title='Odaberi datoteku')
- if len(fname) == 0: return # ako nista korisnik ne unese
- # zatvaramo inicijalnu bazu
- self.connection.commit()
- self.connection.close()
- self.cursor = ''
- # otvaramo novu
- self.connection = connect(fname)
- self.cursor = self.connection.cursor()
- self.Obavijest('Nova baza učitana!', 'green')
- self.DBName.configure(text=('Trenutna baza podataka: ' + fname))
- self.UčitajIzBaze()
- def Kraj(self, e=None):
- self.connection.commit()
- self.connection.close()
- self.root.destroy()
- def Obavijest(self, text, boja):
- self.Labela.configure(text=text, bg=boja, fg='white')
- self.root.update()
- time.sleep(1.5)
- self.Labela.configure(text='---', fg='black')
- self.Labela['bg'] = Label(self.root)['bg']
- self.root.update()
- # ----------FUKCIJE ZA RAD S BAZOM-------------
- def UnesiUBazu(self):
- upit = 'INSERT INTO Knjige (Knjiga, Autor, Žanr, IzdavačkaKuća, GodinaIzdanja)\
- VALUES ('
- for entry in self.Entries:
- upit += '"' + str(entry.get()) + '", '
- entry.delete(0, END)
- upit = upit[:-2] + ')'
- # spremi u bazu
- self.cursor.execute(upit)
- self.connection.commit()
- self.Obavijest('Nova knjiga unesena u bazu!', 'green')
- def StvoriTablicu(self):
- upit = '''CREATE TABLE IF NOT EXISTS Knjige (
- Knjiga TEXT NOT NULL, \
- Autor TEXT NOT NULL, \
- Žanr TEXT NOT NULL, \
- IzdavačkaKuća TEXT NOT NULL, \
- GodinaIzdanja TEXT NOT NULL)'''
- self.cursor.execute(upit)
- self.connection.commit()
- def UčitajIzBaze(self, sortedBy='Knjiga'):
- upit = 'SELECT Knjiga, Autor, Žanr, IzdavačkaKuća, GodinaIzdanja \
- FROM Knjige \
- ORDER BY ' + sortedBy + ' ASC'
- data = self.cursor.execute(upit)
- data = self.ObraditPodatke(data)
- self.T.delete('1.0', END)
- self.T.insert(0.0, data)
- self.Obavijest('Učitana tablica -> sortirano po: ' + sortedBy, 'green')
- def ObraditPodatke(self, data):
- stringData = '-' * 135 + '\n'
- stringData += '| {}| {}| {}| {}| {}|'.format('Knjiga' + (' ' * 19),'Autor' + (' ' * 20), \
- 'Žanr' + (' ' * 21), 'IzdavačkaKuća' + (' ' * 12), 'GodinaIzdanja' + (' ' * 12)) + '\n'
- stringData += '-' * 135
- for row in data:
- stringData += '\n| '
- for cell in row:
- cell_str = str(cell) + (25 - len(str(cell))) * ' ' + '| '
- stringData += cell_str
- stringData += '\n'
- return stringData
- if __name__ == '__main__':
- # prvo uspstavljamo komunikaciju s bazom
- conn = connect('inital_datebase.db')
- cursor = conn.cursor()
- # otvaramo sučelje
- e = Editor(Tk(), cursor, conn)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement