· 7 years ago · Mar 04, 2019, 02:20 PM
1from tkinter.filedialog import *
2from sqlite3 import *
3import time
4
5
6class Editor(Frame):
7 def __init__(self, root, cursor, conn):
8 self.root = root
9 self.cursor = cursor
10 self.connection = conn
11 self.root.title('Program za rad s bazom podataka')
12 super().__init__(self.root)
13 self.StvoriTablicu()
14 self.KreirajSucelje()
15 self.F = ''
16 mainloop()
17
18 def KreirajSucelje(self):
19 self.Naljepnice = {}
20 self.Entries = []
21 lista_naljepnica = ['Knjiga', 'Autor', 'Žanr', 'IzdavaÄka kuća', 'Godina izdanja']
22
23 for i in range(len(lista_naljepnica)):
24 self.Naljepnice[i] = Label(self, text=lista_naljepnica[i])
25 self.Naljepnice[i].grid(row=1, column=i)
26
27 # tekst okviri
28 entry = Entry(self)
29 entry.grid(row=2, column=i)
30 self.Entries.append(entry)
31
32 self.UnesiGumb = Button(self, text='Unesi', command=lambda: (self.UnesiUBazu(), self.UÄitajIzBaze()))
33 self.UnesiGumb.grid(row=2, column=len(lista_naljepnica))
34 self.pack(fill=BOTH, expand=True)
35
36 self.Labela = Label(self.root, text='Dobrodošli')
37 self.Labela.pack(fill=BOTH, expand=True)
38
39 # trake za pomicanje
40 self.T = Text(self.root, wrap=NONE, spacing1=5)
41 self.T.pack(fill=BOTH, expand=True)
42
43 ys = Scrollbar(self.root, orient=VERTICAL)
44 ys.pack(side=RIGHT, fill=Y)
45 xs = Scrollbar(self.root, orient=HORIZONTAL)
46 xs.pack(side=BOTTOM, fill=X)
47
48 self.T.configure(xscrollcommand=xs.set, yscrollcommand=ys.set)
49 ys.configure(command=self.T.yview)
50 xs.configure(command=self.T.xview)
51
52 # izbornici
53 mB = Menu(self.root)
54
55 mD = Menu(mB, tearoff=1)
56 mD.add_command(label='UÄitaj bazu', underline=0, accelerator='Ctrl+N', command=lambda: self.NovaBaza())
57 mD.add_separator()
58 mD.add_command(label='Završi rad', underline=0, accelerator='Ctrl+Q', command=lambda: self.Kraj())
59 mB.add_cascade(menu=mD, label='Upravljanje')
60
61 uM = Menu(mB, tearoff=1)
62 uM.add_command(label='Knjiga', underline=0, command=lambda: self.UÄitajIzBaze('Knjiga'))
63 uM.add_command(label='Autor', underline=0, command=lambda: self.UÄitajIzBaze('Autor'))
64 uM.add_command(label='Žanr', underline=0, command=lambda: self.UÄitajIzBaze('Žanr'))
65 uM.add_command(label='IzdavaÄkaKuća', underline=0, command=lambda: self.UÄitajIzBaze('IzdavaÄkaKuća'))
66 uM.add_command(label='GodinaIzdanja', underline=0, command=lambda: self.UÄitajIzBaze('GodinaIzdanja'))
67 mB.add_cascade(menu=uM, label='Sortiraj')
68
69 self.root.config(menu=mB)
70
71
72
73 def NovaBaza(self):
74
75 fname = askopenfilename(filetypes=[('Datoteke SQL', '*.db')], title='Odaberi datoteku')
76
77 # zatvaramo inicijalnu
78 self.connection.commit()
79 self.connection.close()
80 self.cursor = ''
81
82 # otvaramo novu
83 self.connection = connect(fname)
84 self.cursor = self.connection.cursor()
85 self.Obavijest('Nova baza uÄitana!', 'green')
86
87 def Kraj(self, e=None):
88 self.connection.commit()
89 self.connection.close()
90 self.root.destroy()
91
92 def Obavijest(self, text, boja):
93 self.Labela.configure(text=text, bg=boja, fg='white')
94 self.root.update()
95
96 time.sleep(1.5)
97
98 self.Labela.configure(text='---', fg='black')
99 self.Labela['bg'] = Label(self.root)['bg']
100 self.root.update()
101
102 # ----------FUKCIJE ZA RAD S BAZOM-------------
103 def UnesiUBazu(self):
104 upit = 'INSERT INTO Knjige (Knjiga, Autor, Žanr, IzdavaÄkaKuća, GodinaIzdanja)\
105 VALUES ('
106
107 # prepiši sve tekstove iz okvira u upit
108 for entry in self.Entries:
109 upit += '"' + str(entry.get()) + '", '
110 entry.delete(0, END)
111
112 # na kraju zagarada ide
113 upit = upit[:-2] + ')'
114
115 # spremi u bazu
116 self.cursor.execute(upit)
117 self.connection.commit()
118 self.Obavijest('Nova knjiga unesena u bazu!', 'green')
119
120 def StvoriTablicu(self):
121 upit = '''CREATE TABLE IF NOT EXISTS Knjige (
122 Knjiga TEXT NOT NULL, \
123 Autor TEXT NOT NULL, \
124 Žanr TEXT NOT NULL, \
125 IzdavaÄkaKuća TEXT NOT NULL, \
126 GodinaIzdanja TEXT NOT NULL)'''
127
128 self.cursor.execute(upit)
129 self.connection.commit()
130
131 def UÄitajIzBaze(self, sortedBy='Knjiga'):
132 upit = 'SELECT Knjiga, Autor, Žanr, IzdavaÄkaKuća, GodinaIzdanja \
133 FROM Knjige \
134 ORDER BY ' + sortedBy + ' ASC'
135
136 data = self.cursor.execute(upit)
137 data = self.ObraditPodatke(data)
138 self.T.delete('1.0', END)
139 self.T.insert(0.0, data)
140 self.Obavijest('UÄitana tablica -> sortirano po: ' + sortedBy, 'green')
141
142 def ObraditPodatke(self, data):
143 stringData = '-' * 135 + '\n'
144 stringData += '| {}| {}| {}| {}| {}|'.format('Knjiga' + (' ' * 19),'Autor' + (' ' * 20), \
145 'Žanr' + (' ' * 21), 'IzdavaÄkaKuća' + (' ' * 12), 'GodinaIzdanja' + (' ' * 12)) + '\n'
146 stringData += '-' * 135
147
148 for row in data:
149 stringData += '\n| '
150 for cell in row:
151 cell_str = str(cell) + (25 - len(str(cell))) * ' ' + '| '
152 stringData += cell_str
153
154 stringData += '\n'
155
156 return stringData
157
158
159if __name__ == '__main__':
160 # prvo uspstavljamo komunikacija s bazom
161 conn = connect('skola.db')
162 cursor = conn.cursor()
163
164 # otvaramo suÄelje
165 e = Editor(Tk(), cursor, conn)