Ce programme contient du code frontal et principal pour une application de librairie avec une interface utilisateur graphique simple (GUI) construite avec la bibliothèque Tkinter. Bien que je ne puisse personnellement pas choisir Tkinter si je construisais une application réelle avec une interface utilisateur moderne, Tkinter me sert bien pour me familiariser avec la façon de me connecter aux bases de données (SQLite dans ce cas), de manipuler les données et de refléter la changements sur le front-end avec Python.
le code est celui ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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