Visualiser données sqlite dans tkinter

Résolu/Fermé
Frewil - 23 janv. 2022 à 18:00
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 25 janv. 2022 à 13:12
Bonjour,

Dans le code ci-dessous, je n'arrive pas à afficher les données déjà enregistrées dans la base de donnée créée quand je lance le code. Je ne peux que y voir celles que j'ajoute.
Je pense qu'il doit manquer une ligne de code, mais je ne sais pas laquelle.
Merci pour votre aide

import sqlite3
from tkinter import *
from tkinter.ttk import Treeview
from tkcalendar import DateEntry

# create database if does't exist or connect to the database if already exists
connection = sqlite3.connect("Appartement_database.db")
print("Database created or connected successfully")
cursor = connection.cursor()

# create the window electricite
window_electricite = Tk()
window_electricite.title("Dépenses en électricité")
window_electricite.geometry("800x500")
window_electricite.config(background="lightgrey")

# create the table Electricite
cursor.execute(
    "CREATE TABLE IF NOT EXISTS Electricite (date_facture_elec TEXT, montant_facture_elec TEXT)")
print("Electricite table created")

# date entry
label_date_facture_elec = Label(window_electricite, text="Date de la facture", bg="lightgrey")
label_date_facture_elec.place(x=20, y=80)
entry_date_facture_elec = DateEntry(window_electricite, selectmode="day")
entry_date_facture_elec.place(x=130, y=80)

# entry of the invoice amount
label_montant_facture_elec = Label(window_electricite, text="Montant", bg="lightgrey")
label_montant_facture_elec.place(x=20, y=110)
entry_montant_facture_elec = Entry(window_electricite, width=30)
entry_montant_facture_elec.place(x=130, y=110)

# Create the treeview widget
tree_elec = Treeview(window_electricite, columns=("Date", "Montant"), show="headings")
tree_elec.heading('Date', text="Date")
tree_elec.heading('Montant', text="Montant")
tree_elec.place(x=370, y=25)


def add_data_in_elec_table():
    tree_elec.insert('', 'end', values=(entry_date_facture_elec.get(), entry_montant_facture_elec.get()))
    date_facture_electricit = entry_date_facture_elec.get()
    montant_facture_electricit = entry_montant_facture_elec.get()
    cursor.execute("INSERT INTO Electricite (date_facture_elec, montant_facture_elec) VALUES(?, ?)",
                   (date_facture_electricit, montant_facture_electricit))
    print("Electricity table updated successfully")

    connection.commit()

    # print database once updated
    cursor.execute("SELECT * FROM Electricite")
    result = cursor.fetchall()
    for row in result:
        print(row)


# add command button to the Electricite window

bouton1 = Button(window_electricite, text="Ajouter", command=add_data_in_elec_table)
bouton1.place(x=50, y=180)

bouton2 = Button(window_electricite, text="Supprimer")
bouton2.place(x=112, y=180)

bouton1 = Button(window_electricite, text="Modifier")
bouton1.place(x=190, y=180)

window_electricite.mainloop()

4 réponses

yg_be Messages postés 22778 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 mai 2024 1 481
23 janv. 2022 à 18:20
bonjour,
quand je teste, je vois les anciennes et les nouvelles données.
comment testes-tu précisément?
0
Quand je ferme la fenêtre pour réouvre celle-ci, les données précédemment enregistrées ne sont pas visualisées
0
yg_be Messages postés 22778 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 mai 2024 1 481
24 janv. 2022 à 16:36
C'est peut-être causé par ton environnement de programmation?
0
Frewil > yg_be Messages postés 22778 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 mai 2024
24 janv. 2022 à 17:00
En fait ca marche bien dans la console mais pas dans le widget treeview
0
yg_be Messages postés 22778 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 mai 2024 1 481 > Frewil
24 janv. 2022 à 17:48
le programme ne donne aucune info sur l'endroit où se trouve le fichier, ni il doit le créer. pour mieux comprendre ce qui se passe, je ferais ainsi:
import os.path
fn="Appartement_database.db"
if os.path.exists(fn):
    print("fichier existant:",os.path.abspath(fn))
else:
    print("fichier absent")
connection = sqlite3.connect(fn)
print("Database created or connected successfully")
print("fichier db:",os.path.abspath(fn))
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 24 janv. 2022 à 18:00
Bonsoir,

Moi, pour visualiser TOUTES les données après mise à jour de la base, je ferais ça:

def add_data_in_elec_table():

    date_facture_elec = entry_date_facture_elec.get()
    montant_facture_elec = entry_montant_facture_elec.get()

    cursor.execute("INSERT INTO Electricite (date_facture_elec, montant_facture_elec) VALUES(?, ?)",(date_facture_elec, montant_facture_elec))
    connection.commit()

    for item in tree_elec.get_children(): tree_elec.delete(item)

    cursor.execute("SELECT * FROM Electricite")
    result = cursor.fetchall()
    for row in result: tree_elec.insert('', 'end', values=(row[0], row[1]))


et pour visualiser tout dès le lancement du programme:
.........

cursor.execute("SELECT * FROM Electricite")
result = cursor.fetchall()
for row in result: tree_elec.insert('', 'end', values=(row[0], row[1]))

window_electricite.mainloop()
0
Merci beaucoup, ca marche :-)
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178 > Frewil
25 janv. 2022 à 13:12
Bonjour Frewil,

Puis-je aussi te suggérer d'ajouter cette ligne après la définition de L'Entry facture_elec :

entry_montant_facture_elec.focus()


Comme ça, le curseur de la souris est déjà dans la boite dès le lancement du programme, il n'y a plus qu'a taper la valeur
1
Merci beaucoup pour votre aide
0