Bonjour,
Dans votre code, je ne vois aucune relation entre le treeview et une quelconque base de données.
Est-ce normal ?
Cordialement,
Gandalfix
je l'avais enlevé vu qu'elle ne fonctionnais pas donc je la remet pour que vous voyez plus clair :
def tableau(): root = tk.Tk() root.title("Register / Page admin") root.geometry("1280x720") root.iconbitmap("image.ico") tree = ttk.Treeview(root, columns=("col1", "col2", "col3", "col4" , "col5")) # Connexion à la base de données conn = sqlite3.connect('register.db') c = conn.cursor() # Création de la table s'il n'existe pas c.execute( '''CREATE TABLE IF NOT EXISTS register (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, id_card TEXT, arrival_time TEXT, departure_time TEXT, reason TEXT)''') # Chargement des données de la base de données dans le Treeview data = c.execute("SELECT * FROM register").fetchall() tree = ttk.Treeview(root, columns=("col1", "col2", "col3", "col4", "col5")) # Configuration des colonnes tree.heading("#0", text="Numéro") tree.heading("col1", text="Prénom et nom") tree.heading("col2", text="Numéro carte d'identité") tree.heading("col3", text="Heure d'arrivée") tree.heading("col4", text="Heure de sortie") tree.heading("col5", text="Raison visite") # Configuration de la taille des colonnes tree.column("#0", width=100, minwidth=100) tree.column("col1", width=100, minwidth=100) tree.column("col2", width=150, minwidth=100) tree.column("col3", width=100, minwidth=100) tree.column("col4", width=100, minwidth=100) tree.column("col5", width=100, minwidth=100) tree.pack(expand=True, fill="both") # Ajout de lignes au Treeview counter = 1 for i in range(1, 101): tree.insert("", "end", text=str(counter), values=("vide", "vide", "vide", "vide", "vide")) counter += 1 # Fonction pour la modification des cellules def on_cell_edit(event): item = tree.selection()[0] column = tree.identify_column(event.x) column_index = int(column[1]) - 1 old_value = tree.item(item, "values")[column_index] new_value = tk.simpledialog.askstring("Modification de la cellule", "Nouvelle valeur :", initialvalue=old_value ) if new_value: tree.set(item, column, new_value) def on_tree_key_press(event): if event.keysym == "Return": items = tree.get_children() last_item = items[-1] if tree.focus() == last_item: tree.insert("", "end", text="Nouveau", values=("", "", "", "", "")) tree.bind("<Double-1>", on_cell_edit) tree.bind("<Key>", on_tree_key_press) # Commit the changes and close the connection # Affichage du Treeview root.mainloop()
Bonjour,
Pour remplir un treeview avec les données de la base :
connexion = sqlite3.connect ('register.db') curseur = connexion.cursor () curseur.execute('''SELECT * FROM register;''') connexion.commit () datas= curseur.fetchall() for data in datas: tree.insert ("", END, values = data) connexion.close ()
Il va falloir également penser à procéder aux nouveaux enregistrement et/ou aux modifications d'enregistrements (dans on_cell_edit)
Cordialement,
Gandalfix
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionc'est ce que je trouve correcte mais aucune données précedemment saisient ne s'affichent quand je réouvre le programme
Bonjour,
Le script ci-après fonctionne quant à la visualisation de la fenêtre et des données (si accès à register.db).
À noter que je n'ai pas vérifié les fonctions '..._edit()' et '...key_press()'
Bonne journée,
import tkinter as tk from tkinter import ttk, simpledialog import sqlite3 root = tk.Tk() root.title("Register / Page admin") root.geometry("1280x720") root.iconbitmap("image.ico") tree = ttk.Treeview(root, columns=("col0","col1", "col2", "col3", "col4", "col5")) # Configuration des colonnes tree.heading("col0", text="Numéro") tree.heading("col1", text="Prénom et nom") tree.heading("col2", text="Numéro carte d'identité") tree.heading("col3", text="Heure d'arrivée") tree.heading("col4", text="Heure de sortie") tree.heading("col5", text="Raison visite") # Configuration de la taille des colonnes tree.column("col0", width=100, minwidth=100) tree.column("col1", width=100, minwidth=100) tree.column("col2", width=150, minwidth=100) tree.column("col3", width=100, minwidth=100) tree.column("col4", width=100, minwidth=100) tree.column("col5", width=100, minwidth=100) tree.pack(expand=True, fill="both") # Connexion à la base de données conn = sqlite3.connect('register.db') c = conn.cursor() # Création de la table s'il n'existe pas #c.execute('''CREATE TABLE IF NOT EXISTS register (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, id_card TEXT, arrival_time TEXT, departure_time TEXT, reason TEXT)''') #conn.commit() # Chargement des données de la base de données dans le Treeview try: c.execute("SELECT * FROM register") conn.commit() datas= c.fetchall() counter=1 for data in datas: tree.insert("", tk.END, text=str(counter), values = data) counter+=1 conn.close() except: counter=1 # cas où la BD register n'existe pas ! # Ajout de lignes au Treeview jusque 100 for i in range(counter, 101): tree.insert("", tk.END, text=str(counter), values=("vide", "vide", "vide", "vide", "vide")) counter += 1 # Fonction pour la modification des cellules def on_cell_edit(event): item = tree.selection()[0] column = tree.identify_column(event.x) column_index = int(column[1]) - 1 old_value = tree.item(item, "values")[column_index] new_value = tk.simpledialog.askstring("Modification de la cellule", "Nouvelle valeur :", initialvalue=old_value ) if new_value: tree.set(item, column, new_value) def on_tree_key_press(event): if event.keysym == "Return": items = tree.get_children() last_item = items[-1] if tree.focus() == last_item: tree.insert("", tk.END, text="Nouveau", values=("", "", "", "", "")) tree.bind("<Double-1>", on_cell_edit) tree.bind("<Key>", on_tree_key_press) # Commit the changes and close the connection # Affichage du Treeview if __name__ == "__main__": root.mainloop()
Merci pour votre réponse mais ca ne fonctionne toujours pas malheureusement j'avais essayé ca aussi mais je pense maintenant que le probleme vient des fonction 'edit' et 'key press' meme si je n'en suis pas sure.
Bonjour,
Si vous ne voyez toujours rien, c'est que votre base de données est vide.
Dans la fonction on_cell_edit, comment transmettez vous les modifications effectuées à votre base ?
Cordialement,
Gandalfix
j'ai finalement pu régler mon probleme
En fait,je devais créer une autre requete pour stocker les données dans la bd puis les insérer a l'aide d'un bouton qui gere la fonction "tree.insert"
Merci !!