Explorar el Código

sur deux tables (localités)

dev
Lapin-Blanc hace 3 años
padre
commit
72079464bb
Se han modificado 1 ficheros con 66 adiciones y 33 borrados
  1. +66
    -33
      formulaire.py

+ 66
- 33
formulaire.py Ver fichero

@@ -7,16 +7,42 @@ import sqlite3
db = sqlite3.connect('ecole.sqlite3')
cursor = db.cursor()

cursor.execute("""PRAGMA foreign_keys=ON;""")
cursor.execute("""CREATE TABLE IF NOT EXISTS localites(
ID_Localite INTEGER PRIMARY KEY AUTOINCREMENT,
zipcode TEXT,
localite TEXT);
""")
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;
Nom TEXT,
RefLocalite INTEGER,
FOREIGN KEY(RefLocalite) REFERENCES localites(Id_Localite));
""")
liste_eleves = cursor.fetchall()

def select_all_eleves():
cursor.execute("""SELECT id_eleve, nom, prenom, ifnull(refLocalite, ''), ifnull(zipcode, '-'), ifnull(localite, '-')
FROM eleves
LEFT JOIN localites
ON eleves.reflocalite=localites.id_localite
ORDER BY nom, prenom;
""")
liste_eleves = cursor.fetchall()
return liste_eleves


def select_all_localites():
cursor.execute("""SELECT id_Localite, zipcode, localite
FROM localites
ORDER BY zipcode, localite;
""")
liste_localite = cursor.fetchall()
return liste_localite

liste_eleves = select_all_eleves()
liste_localites = select_all_localites()
liste_localites_combo = [f"{cp} {loc}" for _, cp, loc in liste_localites]

def make_main_window():
col = [
@@ -28,9 +54,9 @@ def make_main_window():
layout = [
[sg.Text('Liste des élèves')],
[sg.Table(values=liste_eleves,
headings=['Id', 'Prénom', 'Nom'],
headings=['', 'Prénom', 'Nom', '', 'Code postal', 'Localité'],
max_col_width=25,
col_widths=[0, 20, 20],
col_widths=[0, 15, 15, 0, 10, 15],
hide_vertical_scroll=True,
background_color='light blue',
text_color='black',
@@ -43,7 +69,7 @@ def make_main_window():
]
window = sg.Window('Formulaire',
layout=layout,
size=(500, 500),
size=(650, 500),
finalize=True)
return window

@@ -52,7 +78,7 @@ def make_add_window(caption,
role='create',
initial_values=None,
eleve_id=None):
prenom, nom = ('','') if not initial_values else initial_values
prenom, nom, id_localite, combo_value = ('','', '', '') if not initial_values else initial_values
layout = [
[sg.Text(text='Prénom', size=(10,2)),
sg.InputText(default_text=prenom,
@@ -62,8 +88,15 @@ def make_add_window(caption,
sg.InputText(default_text=nom,
size=(20,2),
k='nom')],
[sg.Text(text='Localité', size=(10,2)),
sg.Combo(liste_localites_combo,
size=(18,10),
k='localite',
enable_events=True,
default_value=combo_value)],
[sg.Button('Valider', bind_return_key=True),
sg.Button('Annuler', bind_return_key=True)]
sg.Button('Annuler', bind_return_key=True)],
[sg.InputText(default_text=id_localite, k="id_localite", visible=False)]
]
window = sg.Window(caption,
layout=layout,
@@ -74,11 +107,15 @@ def make_add_window(caption,


def main():
liste_eleves = select_all_eleves()
liste_localites = select_all_localites()
liste_localites_combo = [f"{cp} {loc}" for _, cp, loc in liste_localites]

window1, window2 = make_main_window(), None

while True:
window, event, values = sg.read_all_windows()
# print(f'window : {window}, event : {event}, values : {values}')
print(f'window : {window}, event : {event}, values : {values}')
if window == window1:
if event in (sg.WIN_CLOSED, 'Quitter'):
break
@@ -100,22 +137,18 @@ def main():
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()
liste_eleves = select_all_eleves()
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]]
id_eleve, nom, prenom, refLocalite, zipcode, localite = 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],
initial_values=[prenom, nom, refLocalite, zipcode+" "+localite],
role='modify',
eleve_id=id_eleve)
window2.make_modal()
@@ -125,18 +158,20 @@ def main():
window2.close()
window2 = None
if event == 'localite':
index = liste_localites_combo.index(values['localite'])
ID_Localite = liste_localites[index][0]
window['id_localite'].update(ID_Localite)
if window.role == 'create' and event == 'Valider':
prenom = values['prenom'].capitalize()
nom = values['nom'].upper()
id_localite = values['id_localite']
# print(f"prenom : {prenom}, nom : {nom}")
cursor.execute("""INSERT INTO eleves(prenom, nom)
VALUES(?,?);""", (prenom, nom))
cursor.execute("""INSERT INTO eleves(prenom, nom, refLocalite)
VALUES(?,?,?);""", (prenom, nom, id_localite))
db.commit()
cursor.execute("""SELECT id_eleve, nom, prenom
FROM eleves
ORDER BY nom, prenom;
""")
liste_eleves = cursor.fetchall()
liste_eleves = select_all_eleves()
window1['table_eleves'].update(values=liste_eleves, num_rows=len(liste_eleves))
window2.close()
window2 = None
@@ -149,18 +184,16 @@ def main():
continue
prenom = values['prenom'].capitalize()
nom = values['nom'].upper()
id_localite = values['id_localite']
# print(f"prenom : {prenom}, nom : {nom}")
cursor.execute("""UPDATE eleves
SET prenom=?,
nom=?
nom=?,
refLocalite=?
WHERE id_eleve=?;
""", (prenom, nom, window.eleve_id))
""", (prenom, nom, id_localite, window.eleve_id))
db.commit()
cursor.execute("""SELECT id_eleve, nom, prenom
FROM eleves
ORDER BY nom, prenom;
""")
liste_eleves = cursor.fetchall()
liste_eleves = select_all_eleves()
window1['table_eleves'].update(values=liste_eleves,
num_rows=len(liste_eleves))
window2.close()


Cargando…
Cancelar
Guardar