Ce programme contient du code frontend et backend pour une application de librairie avec une interface utilisateur graphique simple (GUI) construite avec la bibliothèque Tkinter sur spyder (python)
le code backend dabord (principale)
-------------------------------------------le code frontend--------------------------------------------------Code:import sqlite3 class Database: def __init__(self,db): self.conn = sqlite3.connect(db) self.cur = self.conn.cursor() self.cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title TEXT, " "author TEXT, year INTEGER, isbn INTEGER)") self.conn.commit() def insert(self,title, author, year, isbn): self.cur.execute("INSERT INTO book VALUES(NULL,?,?,?,?)", (title,author,year,isbn)) self.conn.commit() def view(self): self.cur.execute("SELECT * FROM book") rows = self.cur.fetchall() return rows def search(self,title="", author="", year="", isbn=""): self.cur.execute("SELECT * FROM book WHERE title = ? OR author = ? OR year = ? " "OR isbn = ?", (title, author, year, isbn)) rows = self.cur.fetchall() #conn.close() return rows def delete(self,id): self.cur.execute("DELETE FROM book WHERE id = ?", (id,)) self.conn.commit() #conn.close() def update(self,id, title, author, year, isbn): self.cur.execute("UPDATE book SET title = ?, author = ?, year = ?, isbn = ? WHERE id = ?", (title, author, year, isbn, id)) self.conn.commit()
Code:from tkinter import * from backend import Database database = Database("books.db") class Window(object): #creation d'une classe window def __init__(self,window): # initialisation de l'objet permettant à ce dernier de recevoir l'argument window lors de l'instanciation self.window = window self.window.wm_title("The Book Store") #definition du titre de la fenetre window l1 = Label(window, text="Title",fg='red',bg='black') l1.grid(row=0, column=0) l2 = Label(window, text="Author",fg='red',bg='black') l2.grid(row=0, column=2) l3 = Label(window, text="Year",fg='red',bg='black') l3.grid(row=1, column=0) l4 = Label(window, text="ISBN",fg='red',bg='black') l4.grid(row=1, column=2) self.title_text = StringVar() self.e1 = Entry(window, textvariable=self.title_text) self.e1.grid(row=0, column=1) self.author_text = StringVar() self.e2 = Entry(window, textvariable=self.author_text) self.e2.grid(row=0, column=3) self.year_text = StringVar() self.e3 = Entry(window, textvariable=self.year_text) self.e3.grid(row=1, column=1) self.ISBN_text = StringVar() self.e4= Entry(window, textvariable=self.ISBN_text) self.e4.grid(row=1, column=3) self.list1 = Listbox(window, height=6, width=35) self.list1.grid(row=2, column=0, rowspan=6, columnspan=2) self.list1.bind('<<ListboxSelect>>', self.get_selected_row) # now we need to attach a scrollbar to the listbox, and the other direction,too sb1 = Scrollbar(window) sb1.grid(row=2, column=2, rowspan=6) self.list1.config(yscrollcommand=sb1.set) sb1.config(command=self.list1.yview) b1 = Button(window, text="View all", width=12, command=self.view_command) b1.grid(row=2, column=3) b2 = Button(window, text="Search entry", width=12, command=self.search_command) b2.grid(row=3, column=3) b3 = Button(window, text="Add entry", width=12, command=self.add_command) b3.grid(row=4, column=3) b4 = Button(window, text="Update selected", width=12, command=self.update_command) b4.grid(row=5, column=3) b5 = Button(window, text="Delete selected", width=12, command=self.delete_command) b5.grid(row=6, column=3) b6 = Button(window, text="delete all", width=12, command=window.destroy) b6.grid(row=7, column=3) b6 = Button(window, text="Close", width=12, command=self.delete_all_command) b6.grid(row=8, column=3) def get_selected_row(self,event): #the "event" parameter is needed b/c we've binded this function to the listbox try: index = self.list1.curselection()[0] self.selected_tuple = self.list1.get(index) self.e1.delete(0,END) self.e1.insert(END,self.selected_tuple[1]) self.e2.delete(0, END) self.e2.insert(END,self.selected_tuple[2]) self.e3.delete(0, END) self.e3.insert(END,self.selected_tuple[3]) self.e4.delete(0, END) self.e4.insert(END,self.selected_tuple[4]) except IndexError: pass #in the case where the listbox is empty, the code will not execute def view_command(self): self.list1.delete(0, END) # make sure we've cleared all entries in the listbox every time we press the View all button for row in database.view(): self.list1.insert(END, row) def search_command(self): self.list1.delete(0, END) for row in database.search(self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get()): self.list1.insert(END, row) def add_command(self): database.insert(self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get()) self.list1.delete(0, END) self.list1.insert(END, (self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get())) def delete_command(self): database.delete(self.selected_tuple[0]) self.view_command() def update_command(self): #be careful for the next line ---> we are updating using the texts in the entries, not the selected tuple database.update(self.selected_tuple[0],self.title_text.get(), self.author_text.get(), self.year_text.get(), self.ISBN_text.get()) self.view_command() def delete_all_command(self): self.list1.delete(0, END) for row in database.view(): self.list1.drop(END, row) self.view_command #code for the GUI (front end) window = Tk() Window(window) window.mainloop()
-----