|
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
-
- import PySimpleGUI as sg
- import sqlite3
-
- db = sqlite3.connect('ecole.sqlite3')
- cursor = db.cursor()
-
- cursor.execute("""CREATE TABLE IF NOT EXISTS eleves(
- ID_Eleve INTEGER PRIMARY KEY AUTOINCREMENT,
- Prenom TEXT,
- Nom TEXT);
- """)
- cursor.execute("""SELECT id_eleve, nom, prenom
- FROM eleves
- ORDER BY nom, prenom;
- """)
- liste_eleves = cursor.fetchall()
-
- def make_main_window():
- col = [
- [sg.Button('Ajouter', size=(10, 1), bind_return_key=True)],
- [sg.Button('Modifier', size=(10, 1))],
- [sg.Button('Supprimer', size=(10, 1))],
- [sg.Button('Quitter', size=(10, 1))],
- ]
- layout = [
- [sg.Text('Liste des élèves')],
- [sg.Table(values=liste_eleves,
- headings=['Id', 'Prénom', 'Nom'],
- max_col_width=25,
- col_widths=[0, 20, 20],
- hide_vertical_scroll=True,
- background_color='light blue',
- text_color='black',
- auto_size_columns=False,
- justification='right',
- num_rows=len(liste_eleves),
- alternating_row_color='lightyellow',
- key='table_eleves',
- tooltip='Liste des élèves'), sg.Column(col)],
- ]
- window = sg.Window('Formulaire',
- layout=layout,
- size=(500, 500),
- finalize=True)
- return window
-
-
- def make_add_window(caption,
- role='create',
- initial_values=None,
- eleve_id=None):
- prenom, nom = ('','') if not initial_values else initial_values
- layout = [
- [sg.Text(text='Prénom', size=(10,2)),
- sg.InputText(default_text=prenom,
- size=(20,2),
- k='prenom')],
- [sg.Text(text='Nom', size=(10,2)),
- sg.InputText(default_text=nom,
- size=(20,2),
- k='nom')],
- [sg.Button('Valider', bind_return_key=True),
- sg.Button('Annuler', bind_return_key=True)]
- ]
- window = sg.Window(caption,
- layout=layout,
- finalize=True)
- window.role = role
- window.eleve_id = eleve_id
- return window
-
-
- def main():
- window1, window2 = make_main_window(), None
-
- while True:
- window, event, values = sg.read_all_windows()
- # print(f'window : {window}, event : {event}, values : {values}')
- if window == window1:
- if event in (sg.WIN_CLOSED, 'Quitter'):
- break
-
- if event == 'Ajouter':
- window2 = make_add_window('Ajouter', role='create')
- window2.make_modal()
-
- if event == 'Supprimer':
- try:
- id_eleve = liste_eleves[values['table_eleves'][0]][0]
- except IndexError:
- sg.popup_ok('Veuillez sélectionner un enregistrement à supprimer')
- continue
- confirmation = sg.popup("Confirmez-vous la suppression ?",
- button_type=sg.POPUP_BUTTONS_OK_CANCEL,
- custom_text=("Oui", "Non"))
- if confirmation=="Non":
- continue
- cursor.execute("""DELETE FROM eleves WHERE ID_Eleve=?""",(id_eleve,))
- db.commit()
- cursor.execute("""SELECT id_eleve, nom, prenom
- FROM eleves
- ORDER BY nom, prenom;
- """)
- liste_eleves = cursor.fetchall()
- window1['table_eleves'].update(values=liste_eleves,
- num_rows=len(liste_eleves))
-
- if event == 'Modifier':
- try:
- id_eleve, nom, prenom = liste_eleves[values['table_eleves'][0]]
- except IndexError:
- sg.popup_ok('Veuillez sélectionner un enregistrement à modifier')
- continue
- window2 = make_add_window('Modifier',
- initial_values=[prenom, nom],
- role='modify',
- eleve_id=id_eleve)
- window2.make_modal()
-
- if window == window2:
- if event in (sg.WIN_CLOSED, 'Annuler'):
- window2.close()
- window2 = None
-
- if window.role == 'create' and event == 'Valider':
- prenom = values['prenom'].capitalize()
- nom = values['nom'].upper()
- # print(f"prenom : {prenom}, nom : {nom}")
- cursor.execute("""INSERT INTO eleves(prenom, nom)
- VALUES(?,?);""", (prenom, nom))
- db.commit()
- cursor.execute("""SELECT id_eleve, nom, prenom
- FROM eleves
- ORDER BY nom, prenom;
- """)
- liste_eleves = cursor.fetchall()
- window1['table_eleves'].update(values=liste_eleves, num_rows=len(liste_eleves))
- window2.close()
- window2 = None
-
- if window.role == 'modify' and event == 'Valider':
- confirmation = sg.popup("Confirmez-vous la modification ?",
- button_type=sg.POPUP_BUTTONS_OK_CANCEL,
- custom_text=("Oui", "Non"))
- if confirmation=="Non":
- continue
- prenom = values['prenom'].capitalize()
- nom = values['nom'].upper()
- # print(f"prenom : {prenom}, nom : {nom}")
- cursor.execute("""UPDATE eleves
- SET prenom=?,
- nom=?
- WHERE id_eleve=?;
- """, (prenom, nom, window.eleve_id))
- db.commit()
- cursor.execute("""SELECT id_eleve, nom, prenom
- FROM eleves
- ORDER BY nom, prenom;
- """)
- liste_eleves = cursor.fetchall()
- window1['table_eleves'].update(values=liste_eleves,
- num_rows=len(liste_eleves))
- window2.close()
- window2 = None
-
- window1.close()
- if window2 is not None:
- window2.close()
-
- db.close()
- print('Bye !')
-
- if __name__ == "__main__":
- main()
|