Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.52 KB | None | 0 0
  1. from tkinter.filedialog import *
  2. from tkinter import simpledialog
  3. from sqlite3 import *
  4. import time
  5.  
  6.  
  7. class Editor(Frame):
  8. def __init__(self, root, cursor, conn):
  9. self.root = root
  10. self.cursor = cursor
  11. self.connection = conn
  12. self.root.title('Program za rad s bazom podataka')
  13. super().__init__(self.root)
  14. self.StvoriTablicu()
  15. self.KreirajSucelje()
  16. self.UčitajIzBaze()
  17. mainloop()
  18.  
  19. def KreirajSucelje(self):
  20. self.Naljepnice = {}
  21. self.Entries = []
  22. lista_naljepnica = ['Knjiga', 'Autor', 'Žanr', 'Izdavačka kuća', 'Godina izdanja']
  23.  
  24. for i in range(len(lista_naljepnica)):
  25. self.Naljepnice[i] = Label(self, text=lista_naljepnica[i])
  26. self.Naljepnice[i].grid(row=1, column=i)
  27.  
  28. # tekst okviri
  29. entry = Entry(self)
  30. entry.grid(row=2, column=i)
  31. self.Entries.append(entry)
  32.  
  33. #novi entry i gumb za brisanje
  34. self.a=Button(self, text='Izbriši',command=lambda: self.Izbriši())
  35. self.a.grid(row=5, column=5)
  36. self.b=Entry(self)
  37. self.b.grid(row=5,column=4)
  38.  
  39.  
  40. self.UnesiGumb = Button(self, text='Unesi', command=lambda: (self.UnesiUBazu(), self.UčitajIzBaze()))
  41. self.UnesiGumb.grid(row=2, column=len(lista_naljepnica))
  42. self.pack(fill=BOTH, expand=True)
  43.  
  44. self.Labela = Label(self.root, text='Dobrodošli')
  45. self.Labela.pack(fill=BOTH, expand=True)
  46.  
  47. # trake za pomicanje
  48. self.T = Text(self.root, wrap=NONE, spacing1=5)
  49. self.T.pack(fill=BOTH, expand=True)
  50.  
  51. ys = Scrollbar(self.root, orient=VERTICAL)
  52. ys.pack(side=RIGHT, fill=Y)
  53. xs = Scrollbar(self.root, orient=HORIZONTAL)
  54. xs.pack(side=BOTTOM, fill=X)
  55.  
  56. self.DBName = Label(self.root, text='Trenutna baza podataka: '+ os.path.dirname(__file__) + '/inital_datebase.db')
  57. self.DBName.pack(fill=BOTH, expand=True)
  58.  
  59. self.T.configure(xscrollcommand=xs.set, yscrollcommand=ys.set)
  60. ys.configure(command=self.T.yview)
  61. xs.configure(command=self.T.xview)
  62.  
  63. # izbornici
  64. mB = Menu(self.root)
  65.  
  66. mD = Menu(mB, tearoff=1)
  67. mD.add_command(label='Nova baza', underline=0, accelerator='Ctrl+N', command=lambda: self.NovaBaza())
  68. mD.add_command(label='Učitaj bazu', underline=0, accelerator='Ctrl+N', command=lambda: self.UčitajBazu())
  69. mD.add_separator()
  70. mD.add_command(label='Završi rad', underline=0, accelerator='Ctrl+Q', command=lambda: self.Kraj())
  71. mB.add_cascade(menu=mD, label='Upravljanje')
  72.  
  73. uM = Menu(mB, tearoff=1)
  74. uM.add_command(label='Knjiga', underline=0, command=lambda: self.UčitajIzBaze('Knjiga'))
  75. uM.add_command(label='Autor', underline=0, command=lambda: self.UčitajIzBaze('Autor'))
  76. uM.add_command(label='Žanr', underline=0, command=lambda: self.UčitajIzBaze('Žanr'))
  77. uM.add_command(label='IzdavačkaKuća', underline=0, command=lambda: self.UčitajIzBaze('IzdavačkaKuća'))
  78. uM.add_command(label='GodinaIzdanja', underline=0, command=lambda: self.UčitajIzBaze('GodinaIzdanja'))
  79. mB.add_cascade(menu=uM, label='Sortiraj')
  80.  
  81. self.root.config(menu=mB)
  82.  
  83. def Izbriši(self):
  84. upit='''DELETE FROM Knjige WHERE Knjiga=={}'''.format(self.b.get())
  85. self.cursor.execute(upit)
  86. self.connection.commit()
  87.  
  88.  
  89.  
  90.  
  91.  
  92. def NovaBaza(self):
  93. answer = simpledialog.askstring("Input", "Ime baze (.db format)",
  94. parent=self.root)
  95.  
  96. if answer is None: return # ako nista korisnik ne unese
  97.  
  98. # neispravno ime za bazu
  99. if answer[-3:] != '.db':
  100. self.Obavijest('Krivi format imena baze!', 'red')
  101. return
  102.  
  103. # ako je ispravno ime za bazu
  104. # zatvaramo inicijalnu bazu
  105. self.connection.commit()
  106. self.connection.close()
  107. self.cursor = ''
  108.  
  109. # otvaramo novu
  110. self.connection = connect(answer)
  111. self.cursor = self.connection.cursor()
  112. self.Obavijest('Nova baza napravljena!', 'green')
  113. self.StvoriTablicu()
  114. self.DBName.configure(text=('Trenutna baza podataka: ' + os.path.dirname(__file__) + '/' + answer))
  115. self.UčitajIzBaze()
  116.  
  117. def UčitajBazu(self):
  118.  
  119. fname = askopenfilename(filetypes=[('Datoteke SQL', '*.db')], title='Odaberi datoteku')
  120.  
  121. if len(fname) == 0: return # ako nista korisnik ne unese
  122.  
  123. # zatvaramo inicijalnu bazu
  124. self.connection.commit()
  125. self.connection.close()
  126. self.cursor = ''
  127.  
  128. # otvaramo novu
  129. self.connection = connect(fname)
  130. self.cursor = self.connection.cursor()
  131. self.Obavijest('Nova baza učitana!', 'green')
  132. self.DBName.configure(text=('Trenutna baza podataka: ' + fname))
  133. self.UčitajIzBaze()
  134.  
  135. def Kraj(self, e=None):
  136. self.connection.commit()
  137. self.connection.close()
  138. self.root.destroy()
  139.  
  140. def Obavijest(self, text, boja):
  141. self.Labela.configure(text=text, bg=boja, fg='white')
  142. self.root.update()
  143.  
  144. time.sleep(1.5)
  145.  
  146. self.Labela.configure(text='---', fg='black')
  147. self.Labela['bg'] = Label(self.root)['bg']
  148. self.root.update()
  149.  
  150. # ----------FUKCIJE ZA RAD S BAZOM-------------
  151. def UnesiUBazu(self):
  152. upit = 'INSERT INTO Knjige (Knjiga, Autor, Žanr, IzdavačkaKuća, GodinaIzdanja)\
  153. VALUES ('
  154.  
  155. for entry in self.Entries:
  156. upit += '"' + str(entry.get()) + '", '
  157. entry.delete(0, END)
  158.  
  159.  
  160. upit = upit[:-2] + ')'
  161.  
  162. # spremi u bazu
  163. self.cursor.execute(upit)
  164. self.connection.commit()
  165. self.Obavijest('Nova knjiga unesena u bazu!', 'green')
  166.  
  167. def StvoriTablicu(self):
  168. upit = '''CREATE TABLE IF NOT EXISTS Knjige (
  169. Knjiga TEXT NOT NULL, \
  170. Autor TEXT NOT NULL, \
  171. Žanr TEXT NOT NULL, \
  172. IzdavačkaKuća TEXT NOT NULL, \
  173. GodinaIzdanja TEXT NOT NULL)'''
  174.  
  175. self.cursor.execute(upit)
  176. self.connection.commit()
  177.  
  178. def UčitajIzBaze(self, sortedBy='Knjiga'):
  179. upit = 'SELECT Knjiga, Autor, Žanr, IzdavačkaKuća, GodinaIzdanja \
  180. FROM Knjige \
  181. ORDER BY ' + sortedBy + ' ASC'
  182.  
  183. data = self.cursor.execute(upit)
  184. data = self.ObraditPodatke(data)
  185. self.T.delete('1.0', END)
  186. self.T.insert(0.0, data)
  187. self.Obavijest('Učitana tablica -> sortirano po: ' + sortedBy, 'green')
  188.  
  189. def ObraditPodatke(self, data):
  190. stringData = '-' * 135 + '\n'
  191. stringData += '| {}| {}| {}| {}| {}|'.format('Knjiga' + (' ' * 19),'Autor' + (' ' * 20), \
  192. 'Žanr' + (' ' * 21), 'IzdavačkaKuća' + (' ' * 12), 'GodinaIzdanja' + (' ' * 12)) + '\n'
  193. stringData += '-' * 135
  194.  
  195. for row in data:
  196. stringData += '\n| '
  197. for cell in row:
  198. cell_str = str(cell) + (25 - len(str(cell))) * ' ' + '| '
  199. stringData += cell_str
  200.  
  201. stringData += '\n'
  202.  
  203. return stringData
  204.  
  205.  
  206. if __name__ == '__main__':
  207. # prvo uspstavljamo komunikaciju s bazom
  208. conn = connect('inital_datebase.db')
  209. cursor = conn.cursor()
  210.  
  211. # otvaramo sučelje
  212. e = Editor(Tk(), cursor, conn)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement