GUI programming
Publié : 21 mai 2020 14:52
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 spider (python)
le code backend dabord (principale)
-------------------------------------------le code frontend--------------------------------------------------
le code backend dabord (principale)
Code : Tout sélectionner
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 : Tout sélectionner
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()