1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| 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()
-------------------------------------------le code frontend--------------------------------------------------
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 |
Partager