Quand on travaille avec des données, il est intéressant de pouvoir faire un affichage en lignes et en colonnes. Avec tkinter, le widget Treeview est tout indiqué pour cette tâche.
Voici un exemple d'utilisation :
#!/usr/bin/env python
from tkinter import *
from tkinter.ttk import *
import sqlite3
import sys
import traceback
# fenêtre principale
fenetre = Tk()
fenetre.title('Système scolaire')
# libellé
libelle = Label(fenetre, text = 'Étudiants')
libelle.pack(padx = 10, pady = 10)
#tableau
tableau = Treeview(fenetre, columns=('nomfamille', 'prenom', 'da'))
tableau.heading('nomfamille', text='Nom de famille')
tableau.heading('prenom', text='Prénom')
tableau.heading('da', text='DA')
tableau['show'] = 'headings' # sans ceci, il y avait une colonne vide à gauche qui a pour rôle d'afficher le paramètre "text" qui peut être spécifié lors du insert
tableau.pack(padx = 10, pady = (0, 10))
# bouton pour terminer le programme
bouton_terminer = Button(fenetre, text = 'Terminer', command = fenetre.destroy)
bouton_terminer.pack(padx = 10, pady = (0, 10))
# lecture et affichage des données
try:
connexion = None
connexion = sqlite3.connect('file:systemescolaire.db?mode=rw', uri=True)
curseur = connexion.cursor()
requete = 'SELECT id, nomfamille, prenom, da FROM etudiants ORDER BY nomfamille, prenom'
curseur.execute(requete)
resultat = curseur.fetchall()
if len(resultat):
for enreg in resultat:
# chaque ligne n'a pas de parent, est ajoutée à la fin de la liste, utilise le champ id comme identifiant et on fournit les valeurs pour chacune des colonnes du tableau
tableau.insert('', 'end', iid=enreg[0], values=(enreg[1], enreg[2], enreg[3]))
else:
libelle.configure(text = 'Il n\'y a présentement aucun étudiant.')
tableau.pack_forget()
except sqlite3.OperationalError as e:
if not connexion:
libelle.configure('La connexion à la base de données a échoué.')
else:
libelle.configure(text='Il y a une erreur dans la requête SQL.')
traceback.print_exc(file=sys.stdout)
except Exception as e:
libelle.configure(text='Une erreur inattendue est survenue.')
traceback.print_exc(file=sys.stdout)
finally:
if connexion:
connexion.close()
# la fenêtre s'affiche puis attend les interactions de l'usager
fenetre.mainloop()

Voici quelques explications :
tableau = Treeview(fenetre, columns=('nomfamille', 'prenom', 'da'))
tableau.heading('nomfamille', text='Nom de famille')
tableau.heading('prenom', text='Prénom')
tableau.heading('da', text='DA')
tableau['show'] = 'headings'
tableau.insert('', 'end', iid=enreg[0], values=(enreg[1], enreg[2], enreg[3]))
▼Publicité