Démonstration de l'usage de l'API Sqlite3 pour encoder des élèves.1er essai
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

177 linhas
6.7 KiB

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import PySimpleGUI as sg
  4. import sqlite3
  5. db = sqlite3.connect('ecole.sqlite3')
  6. cursor = db.cursor()
  7. cursor.execute("""CREATE TABLE IF NOT EXISTS eleves(
  8. ID_Eleve INTEGER PRIMARY KEY AUTOINCREMENT,
  9. Prenom TEXT,
  10. Nom TEXT);
  11. """)
  12. cursor.execute("""SELECT id_eleve, nom, prenom
  13. FROM eleves
  14. ORDER BY nom, prenom;
  15. """)
  16. liste_eleves = cursor.fetchall()
  17. def make_main_window():
  18. col = [
  19. [sg.Button('Ajouter', size=(10, 1), bind_return_key=True)],
  20. [sg.Button('Modifier', size=(10, 1))],
  21. [sg.Button('Supprimer', size=(10, 1))],
  22. [sg.Button('Quitter', size=(10, 1))],
  23. ]
  24. layout = [
  25. [sg.Text('Liste des élèves')],
  26. [sg.Table(values=liste_eleves,
  27. headings=['Id', 'Prénom', 'Nom'],
  28. max_col_width=25,
  29. col_widths=[0, 20, 20],
  30. hide_vertical_scroll=True,
  31. background_color='light blue',
  32. text_color='black',
  33. auto_size_columns=False,
  34. justification='right',
  35. num_rows=len(liste_eleves),
  36. alternating_row_color='lightyellow',
  37. key='table_eleves',
  38. tooltip='Liste des élèves'), sg.Column(col)],
  39. ]
  40. window = sg.Window('Formulaire',
  41. layout=layout,
  42. size=(500, 500),
  43. finalize=True)
  44. return window
  45. def make_add_window(caption,
  46. role='create',
  47. initial_values=None,
  48. eleve_id=None):
  49. prenom, nom = ('','') if not initial_values else initial_values
  50. layout = [
  51. [sg.Text(text='Prénom', size=(10,2)),
  52. sg.InputText(default_text=prenom,
  53. size=(20,2),
  54. k='prenom')],
  55. [sg.Text(text='Nom', size=(10,2)),
  56. sg.InputText(default_text=nom,
  57. size=(20,2),
  58. k='nom')],
  59. [sg.Button('Valider', bind_return_key=True),
  60. sg.Button('Annuler', bind_return_key=True)]
  61. ]
  62. window = sg.Window(caption,
  63. layout=layout,
  64. finalize=True)
  65. window.role = role
  66. window.eleve_id = eleve_id
  67. return window
  68. def main():
  69. window1, window2 = make_main_window(), None
  70. while True:
  71. window, event, values = sg.read_all_windows()
  72. # print(f'window : {window}, event : {event}, values : {values}')
  73. if window == window1:
  74. if event in (sg.WIN_CLOSED, 'Quitter'):
  75. break
  76. if event == 'Ajouter':
  77. window2 = make_add_window('Ajouter', role='create')
  78. window2.make_modal()
  79. if event == 'Supprimer':
  80. try:
  81. id_eleve = liste_eleves[values['table_eleves'][0]][0]
  82. except IndexError:
  83. sg.popup_ok('Veuillez sélectionner un enregistrement à supprimer')
  84. continue
  85. confirmation = sg.popup("Confirmez-vous la suppression ?",
  86. button_type=sg.POPUP_BUTTONS_OK_CANCEL,
  87. custom_text=("Oui", "Non"))
  88. if confirmation=="Non":
  89. continue
  90. cursor.execute("""DELETE FROM eleves WHERE ID_Eleve=?""",(id_eleve,))
  91. db.commit()
  92. cursor.execute("""SELECT id_eleve, nom, prenom
  93. FROM eleves
  94. ORDER BY nom, prenom;
  95. """)
  96. liste_eleves = cursor.fetchall()
  97. window1['table_eleves'].update(values=liste_eleves,
  98. num_rows=len(liste_eleves))
  99. if event == 'Modifier':
  100. try:
  101. id_eleve, nom, prenom = liste_eleves[values['table_eleves'][0]]
  102. except IndexError:
  103. sg.popup_ok('Veuillez sélectionner un enregistrement à modifier')
  104. continue
  105. window2 = make_add_window('Modifier',
  106. initial_values=[prenom, nom],
  107. role='modify',
  108. eleve_id=id_eleve)
  109. window2.make_modal()
  110. if window == window2:
  111. if event in (sg.WIN_CLOSED, 'Annuler'):
  112. window2.close()
  113. window2 = None
  114. if window.role == 'create' and event == 'Valider':
  115. prenom = values['prenom'].capitalize()
  116. nom = values['nom'].upper()
  117. # print(f"prenom : {prenom}, nom : {nom}")
  118. cursor.execute("""INSERT INTO eleves(prenom, nom)
  119. VALUES(?,?);""", (prenom, nom))
  120. db.commit()
  121. cursor.execute("""SELECT id_eleve, nom, prenom
  122. FROM eleves
  123. ORDER BY nom, prenom;
  124. """)
  125. liste_eleves = cursor.fetchall()
  126. window1['table_eleves'].update(values=liste_eleves, num_rows=len(liste_eleves))
  127. window2.close()
  128. window2 = None
  129. if window.role == 'modify' and event == 'Valider':
  130. confirmation = sg.popup("Confirmez-vous la modification ?",
  131. button_type=sg.POPUP_BUTTONS_OK_CANCEL,
  132. custom_text=("Oui", "Non"))
  133. if confirmation=="Non":
  134. continue
  135. prenom = values['prenom'].capitalize()
  136. nom = values['nom'].upper()
  137. # print(f"prenom : {prenom}, nom : {nom}")
  138. cursor.execute("""UPDATE eleves
  139. SET prenom=?,
  140. nom=?
  141. WHERE id_eleve=?;
  142. """, (prenom, nom, window.eleve_id))
  143. db.commit()
  144. cursor.execute("""SELECT id_eleve, nom, prenom
  145. FROM eleves
  146. ORDER BY nom, prenom;
  147. """)
  148. liste_eleves = cursor.fetchall()
  149. window1['table_eleves'].update(values=liste_eleves,
  150. num_rows=len(liste_eleves))
  151. window2.close()
  152. window2 = None
  153. window1.close()
  154. if window2 is not None:
  155. window2.close()
  156. db.close()
  157. print('Bye !')
  158. if __name__ == "__main__":
  159. main()