Treeview tkinter

Résolu
mohamed2511 Messages postés 5 Date d'inscription mercredi 8 février 2023 Statut Membre Dernière intervention 14 février 2023 - Modifié le 8 févr. 2023 à 20:43
Gandalfix Messages postés 80 Date d'inscription vendredi 12 juin 2020 Statut Non membre Dernière intervention 15 avril 2024 - 14 févr. 2023 à 20:52

Bonjour, donc j'ai créé un treeview dont l'utilisateur peut modifier les cellules cependant j'aimerais pouvoir enregistrer les données saisies dans chaque cellule par l'utilisateur grace a un bouton en utilisant mysql mais ca ne fonctionne car les données ne se raffichent pas quand je relance la fenetre voici le code du tableau :

 
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"))


    # 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)



    # Affichage du Treeview
    root.mainloop()
A voir également:

9 réponses

Gandalfix Messages postés 80 Date d'inscription vendredi 12 juin 2020 Statut Non membre Dernière intervention 15 avril 2024 7
9 févr. 2023 à 05:02

Bonjour,

Dans votre code, je ne vois aucune relation entre le treeview et une quelconque base de données.

Est-ce normal ?


1
Gandalfix Messages postés 80 Date d'inscription vendredi 12 juin 2020 Statut Non membre Dernière intervention 15 avril 2024 7
14 févr. 2023 à 20:52

Bonjour,

Pensez à passer le sujet en résolu.


1
mohamed2511 Messages postés 5 Date d'inscription mercredi 8 février 2023 Statut Membre Dernière intervention 14 février 2023
Modifié le 13 févr. 2023 à 12:29

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()
0
Gandalfix Messages postés 80 Date d'inscription vendredi 12 juin 2020 Statut Non membre Dernière intervention 15 avril 2024 7
11 févr. 2023 à 18:17

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)


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mohamed2511 Messages postés 5 Date d'inscription mercredi 8 février 2023 Statut Membre Dernière intervention 14 février 2023
12 févr. 2023 à 01:27

c'est ce que je trouve correcte mais aucune données précedemment saisient ne s'affichent quand je réouvre le programme

0
jpmaton Messages postés 67 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 26 septembre 2023 3
12 févr. 2023 à 09:29

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()

0
mohamed2511 Messages postés 5 Date d'inscription mercredi 8 février 2023 Statut Membre Dernière intervention 14 février 2023
12 févr. 2023 à 13:33

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.

0
Gandalfix Messages postés 80 Date d'inscription vendredi 12 juin 2020 Statut Non membre Dernière intervention 15 avril 2024 7
12 févr. 2023 à 17:50

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 ?


0
mohamed2511 Messages postés 5 Date d'inscription mercredi 8 février 2023 Statut Membre Dernière intervention 14 février 2023
14 févr. 2023 à 15:39

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 !!

0
Rejoignez-nous