AttributeError: module 'mysql.connector.cursor' has no attri
Frewil
-
Frewil -
Frewil -
Bonjour,
Lorsque le morceau de script ci-dessous s'execute, le message
"AttributeError: module 'mysql.connector.cursor' has no attribute 'execute'"
est affiché.
Je n'arrive pas à comprendre ce qui est faut dans mon code.
Merci pour votre aide.
Lorsque le morceau de script ci-dessous s'execute, le message
"AttributeError: module 'mysql.connector.cursor' has no attribute 'execute'"
est affiché.
Je n'arrive pas à comprendre ce qui est faut dans mon code.
Merci pour votre aide.
def treeview_for_electricite_database(): tree_elec = Treeview(window_electricite, columns=("Id", "Date", "Montant", "Référence"), show="headings") tree_elec.heading('Id', text="Id") tree_elec.heading('Date', text="Date") tree_elec.heading('Montant', text="Montant") tree_elec.heading('Référence', text="Référence") tree_elec.column("Id", anchor=CENTER, width=20) tree_elec.column("Date", anchor=CENTER, width=70) tree_elec.column("Montant", anchor=CENTER, width=70) tree_elec.column("Référence", anchor=CENTER, width=70) tree_elec.place(x=420, y=25) cursor.execute("SELECT * FROM Electricite") result_elec = cursor.fetchall() for row in result_elec: tree_elec.insert('', 'end', values=(row[0], row[1], row[2], row[3])) print("Affichage de la table Electricite (Treeview) crée dans la vue Electricite")
A voir également:
- Attributeerror: module 'mysql.connector' has no attribute 'connect'
- Nº sur clavier ✓ - Forum Bureautique
- Igfxtray module ✓ - Forum Virus
- Attribute changer - Télécharger - Divers Utilitaires
- Pas de module ci - Forum TV & Vidéo
- Manque cam module - Forum TNT / Satellite / Réception
5 réponses
Bonjour,
On ne voit pas tout le code
As-tu bien défini le cursor comme ici mais avec un autre nom que cursor puisque c'est déjà le nom de l'objet Python:
On ne voit pas tout le code
As-tu bien défini le cursor comme ici mais avec un autre nom que cursor puisque c'est déjà le nom de l'objet Python:
import sqlite3 connexion = sqlite3.connect(database) curs =connexion.cursor() curs.execute('"SELECT * FROM Electricite"')
Bonjour,
Ah! le code a changé
maintenant, c'est curs.execute...
Le curseur est initialisé dans appartement_database()
Mais est-il connu dans les autres fonctions ?
(portée des variables )
Ah! le code a changé
maintenant, c'est curs.execute...
Le curseur est initialisé dans appartement_database()
Mais est-il connu dans les autres fonctions ?
(portée des variables )
Bonjour,
Merci de m'avoir mis sur la voie.
Par contre, cela me génère d'autres messages comme
AttributeError: 'NoneType' object has no attribute 'get_children'
ou encore
AttributeError: 'NoneType' object has no attribute 'selection'
si je lance les fonctions associées aux boutons Ajouter ou Supprimer
Merci de m'avoir mis sur la voie.
Par contre, cela me génère d'autres messages comme
AttributeError: 'NoneType' object has no attribute 'get_children'
ou encore
AttributeError: 'NoneType' object has no attribute 'selection'
si je lance les fonctions associées aux boutons Ajouter ou Supprimer
import sqlite3 import tkinter import tkinter as tk from tkinter import * from tkinter import messagebox, ttk from tkinter.ttk import Treeview from tkcalendar import DateEntry # Creation de la fenetre principale avec sa barre de menu def create_main_window(): main = tk.Tk() main.title("Gestion appartement") main.geometry("1200x1000") print("fenetre principale créée") main.tk.call("source", "azure.tcl") main.tk.call("set_theme", "light") print("thème appliqué") # Creation de la barre de menu menubar = Menu(main) main.config(menu=menubar) # Ajouter le menu Fichier et son sous-menu "Exit" dans la barre de menu menufichier = Menu(menubar) menubar.add_cascade(label="Fichier", menu=menufichier) menufichier.add_cascade(label='Exit', command=main.destroy, ) # Ajouter le menu "Affichage" dans la barre de menu menuaffichage = Menu(menubar) menubar.add_cascade(label="Affichage", menu=menuaffichage) # Ajouter Menu "Dépenses" avec ses sous-menus dans "menuaffichage" sub_menu = Menu(menuaffichage) sub_menu.add_command(label="Electricité", command=create_electricite_window) sub_menu.add_command(label="2") sub_menu.add_command(label="3") menuaffichage.add_cascade(label='Dépenses', menu=sub_menu) # Ajouter le menu "Recettes" dans "menuaffichage" menuaffichage.add_command(label='Recettes', command=main.destroy, ) print("barre de menu créée") main.mainloop() # Creation de la fenetre Electricite def create_electricite_window(sum_elec=None): # Création du cadre de la vue electricité window_electricite = tkinter.Toplevel() window_electricite.title("Dépenses en électricité") window_electricite.geometry("1400x800") window_electricite.resizable(width=False, height=False) print("frame principal de la fenetre Electrixite crée") # Creation de la base de donnees principale pour enregistrer les donnéées def appartement_database(): connection = sqlite3.connect("Appartement_database.db") print("Base de données principale Appartement connectée") curs = connection.cursor() curs.execute("SELECT * FROM Electricite") # creation de la table Electricite dans la base de données principale Appartement curs.execute( "CREATE TABLE IF NOT EXISTS Electricite (Id INTEGER PRIMARY KEY, date_facture_elec TEXT, " "montant_facture_elec TEXT, Ref_facture_elec TEXT)") print("Table Electricite créée ou connectée dans la base principale Appartement") # calcul des totaux annuels à partir des donnéees dans la table Electricté de la base données principale def sum_elec(): find_sum_total_elec = "select sum(montant_facture_elec) from Electricite" curs.execute(find_sum_total_elec) total_elec = (curs.fetchone()[0]) print("Total global: ", total_elec) curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2021"') total_elec_2021 = (curs.fetchone()[0]) print('total 2021: ', str(total_elec_2021) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2022"') total_elec_2022 = (curs.fetchone()[0]) print('total 2022: ', str(total_elec_2022) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2023"') total_elec_2023 = (curs.fetchone()[0]) print('total 2023: ', str(total_elec_2023) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2024"') total_elec_2024 = (curs.fetchone()[0]) print('total 2024: ', str(total_elec_2024) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2025"') total_elec_2025 = (curs.fetchone()[0]) print('total 2025: ', str(total_elec_2025) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2026"') total_elec_2026 = (curs.fetchone()[0]) print('total 2026: ', str(total_elec_2026) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2027"') total_elec_2027 = (curs.fetchone()[0]) print('total 2027: ', str(total_elec_2027) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2029"') total_elec_2028 = (curs.fetchone()[0]) print('total 2028: ', str(total_elec_2028) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2029"') total_elec_2029 = (curs.fetchone()[0]) print('total 2029: ', str(total_elec_2029) + " €") curs.execute(f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%2030"') total_elec_2030 = (curs.fetchone()[0]) print('total 2030: ', str(total_elec_2030) + " €") print("Calcul de totaux annuels réalisé") sum_elec() # Afficher dans la vue electricite les totaux annuels calculés def calc_total_annuel(total_elec_2021=None, total_elec_2022=None, total_elec_2023=None, total_elec_2024=None, total_elec_2025=None, total_elec_2026=None, total_elec_2027=None, total_elec_2028=None, total_elec_2029=None, total_elec_2030=None): # création du frame pour accueillir les totaux annuels frame3 = ttk.LabelFrame(window_electricite, text="Total annuel", width=200, height=280) frame3.place(x=810, y=16) print("Frame crée dans la fenetre Electricite pour accueillir les totaux annuels") # création des labels avec les totaux annuels label_total_elec_2021 = Label(window_electricite, text="Montant total 2021: " + str(total_elec_2021) + " €") label_total_elec_2021.place(x=825, y=38) label_total_elec_2022 = Label(window_electricite, text="Montant total 2022: " + str(total_elec_2022) + " €") label_total_elec_2022.place(x=825, y=58) label_total_elec_2023 = Label(window_electricite, text="Montant total 2023: " + str(total_elec_2023) + " €") label_total_elec_2023.place(x=825, y=78) label_total_elec_2024 = Label(window_electricite, text="Montant total 2024: " + str(total_elec_2024) + " €") label_total_elec_2024.place(x=825, y=98) label_total_elec_2025 = Label(window_electricite, text="Montant total 2025: " + str(total_elec_2025) + " €") label_total_elec_2025.place(x=825, y=118) label_total_elec_2026 = Label(window_electricite, text="Montant total 2026: " + str(total_elec_2026) + " €") label_total_elec_2026.place(x=825, y=138) label_total_elec_2027 = Label(window_electricite, text="Montant total 2027: " + str(total_elec_2027) + " €") label_total_elec_2027.place(x=825, y=158) label_total_elec_2028 = Label(window_electricite, text="Montant total 2028: " + str(total_elec_2028) + " €") label_total_elec_2028.place(x=825, y=178) label_total_elec_2029 = Label(window_electricite, text="Montant total 2029: " + str(total_elec_2029) + " €") label_total_elec_2029.place(x=825, y=198) label_total_elec_2030 = Label(window_electricite, text="Montant total 2030: " + str(total_elec_2030) + " €") label_total_elec_2030.place(x=825, y=218) print("totaux annuels affichés dans la vue Electricite") # appel de fonctions appartement_database() calc_total_annuel() frame1 = ttk.LabelFrame(window_electricite, text="Electricité", width=370, height=280) frame1.place(x=15, y=16) print("Frame crée dans la fenetre Electricite pour accueillir les boutons et les entrées") # frame2 dans la fonction "delete_data_in_elec_table()" # entree de la date de facture electricite label_date_facture_elec = Label(window_electricite, text="Date de la facture") label_date_facture_elec.place(x=30, y=50) entry_date_facture_elec = DateEntry(window_electricite, date_pattern='dd/mm/y') entry_date_facture_elec.place(x=140, y=50) print("champs d'entrée de la date de la facture electricité crée") # entree du montant de la facture electricite label_montant_facture_elec = Label(window_electricite, text="Montant facture") label_montant_facture_elec.place(x=30, y=90) entry_montant_facture_elec = Entry(window_electricite, width=30) entry_montant_facture_elec.focus() entry_montant_facture_elec.place(x=140, y=90) print("champs d'entrée du montant de la facture electricité crée") # entree reference facture electricite label_reference_facture_elec = Label(window_electricite, text="Référence facture") label_reference_facture_elec.place(x=30, y=130) entry_reference_facture_elec = Entry(window_electricite, width=30) entry_reference_facture_elec.place(x=140, y=130) print("champs d'entrée de la référence de la facture electricité crée") # création du treeview pour afficher les donnéées de la table Electricite dans la base de données principale def treeview_for_electricite_database(): tree_elec = Treeview(window_electricite, columns=("Id", "Date", "Montant", "Référence"), show="headings") tree_elec.heading('Id', text="Id") tree_elec.heading('Date', text="Date") tree_elec.heading('Montant', text="Montant") tree_elec.heading('Référence', text="Référence") tree_elec.column("Id", anchor=CENTER, width=20) tree_elec.column("Date", anchor=CENTER, width=70) tree_elec.column("Montant", anchor=CENTER, width=70) tree_elec.column("Référence", anchor=CENTER, width=70) tree_elec.place(x=420, y=25) connection = sqlite3.connect("Appartement_database.db") print("Base de données principale Appartement connectée") curs = connection.cursor() curs.execute("SELECT * FROM Electricite") result_elec = curs.fetchall() for row in result_elec: tree_elec.insert('', 'end', values=(row[0], row[1], row[2], row[3])) print("Affichage de la table Electricite (Treeview) crée dans la vue Electricite") # Ajouter des données dans la table Electricite de la base de donnees Appartement def add_data_in_elec_table(tree_elec=None): # definition de variables date_facture_elec = entry_date_facture_elec.get() montant_facture_elec = entry_montant_facture_elec.get() reference_facture_elec = entry_reference_facture_elec.get() connection = sqlite3.connect("Appartement_database.db") print("Base de données principale Appartement connectée") curs = connection.cursor() curs.execute("INSERT INTO Electricite (date_facture_elec, montant_facture_elec, Ref_facture_elec)" "VALUES(?,?,?)", (date_facture_elec, montant_facture_elec, reference_facture_elec)) connection.commit() for item in tree_elec.get_children(): tree_elec.delete(item) connection = sqlite3.connect("Appartement_database.db") print("Base de données principale Appartement connectée") curs = connection.cursor() curs.execute("SELECT * FROM Electricite") result_elec = curs.fetchall() for row in result_elec: tree_elec.insert('', 'end', values=(row[0], row[1], row[2], row[3])) entry_montant_facture_elec.delete(0, END) # vider le champs Montant après avoir cliqué sur Ajouter et complété # la base de données entry_reference_facture_elec.delete(0, END) # vider le champs Référence après avoir cliqué sur Ajouter et # complété la base de données sum_elec() # recalculer la somme totale # bouton "Ajouter" bouton1 = ttk.Button(window_electricite, text="Ajouter", command=add_data_in_elec_table) bouton1.place(x=30, y=180) print("bouton Ajouter crée") treeview_for_electricite_database() # Supprimer des donnees dans la table Electricite de la base de donnees Appartement def delete_data_in_elec_table(tree_elec=None): if not tree_elec.selection(): # Teste si une ligne a été sélectionnée avant d'exécuter l'instruction delete frame2 = Label(window_electricite, text="Veuillez sélectionner une ligne", fg="#F00020", font="Arial 12") frame2.place(x=85, y=270) frame2.after(3000, frame2.destroy) else: # result = messagebox.askquestion("Electricité", "Etes-vous sûr de vouloir supprimer cette facture", # icon="warning") if result == 'yes': iid = tree_elec.focus() # Obtient l'iid de la ligne sélectionnée et qui a le focus sup_row = tree_elec.set(iid, "Id") tree_elec.delete(iid) connection = sqlite3.connect("Appartement_database.db") print("Base de données principale Appartement connectée") curs = connection.cursor() curs.execute("DELETE FROM Electricite WHERE Id = ?", (sup_row,)) frame2 = Label(window_electricite, text="Facture supprimée", fg="#F00020", font="Arial 12") frame2.place(x=125, y=270) frame2.after(3000, frame2.destroy) # effacer le message après 3000 ms sum_elec() # recalculer la somme totale # bouton "Supprimer" bouton2 = ttk.Button(window_electricite, text="Supprimer", command=delete_data_in_elec_table) bouton2.place(x=132, y=180) print("bouton Supprimer crée") # bouton "Modifier" bouton3 = ttk.Button(window_electricite, text="Modifier") bouton3.place(x=235, y=180) print("bouton Modifier crée") def close_window_electricite(): window_electricite.destroy() bouton4 = ttk.Button(window_electricite, text="Quitter", command=close_window_electricite) bouton4.place(x=30, y=220) print("bouton Quitter crée") create_main_window()
Bonjour,
AttributeError: 'NoneType' object has no attribute 'get_children'
c'est surement à la ligne
donc, à ce moment, l'objet tree_elec est surement vide et on ne peut donc pas aller chercher son attribut get_children
Moi, j'ai une erreur ici:
sqlite3.OperationalError: no such table: Electricite
Normal : la table est définie juste après, donc elle n'est pas encore connue à ce stade
Pourquoi définir des fonctions dans d'autre fonctions ?
AttributeError: 'NoneType' object has no attribute 'get_children'
c'est surement à la ligne
tree_elec.get_children()
donc, à ce moment, l'objet tree_elec est surement vide et on ne peut donc pas aller chercher son attribut get_children
Moi, j'ai une erreur ici:
curs.execute("SELECT * FROM Electricite")
sqlite3.OperationalError: no such table: Electricite
Normal : la table est définie juste après, donc elle n'est pas encore connue à ce stade
Pourquoi définir des fonctions dans d'autre fonctions ?
Bonjour,
Merci pour ta réponse.
Il va falloir que je m'y penche plus en détail, car je n'arrive pas à résoudre, même en suivant tes conseils
Merci pour ta réponse.
Il va falloir que je m'y penche plus en détail, car je n'arrive pas à résoudre, même en suivant tes conseils
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Il faut dire que ton code est une vraie "usine à gaz " :-) :-)
en général, on structure comme ceci:
imports
définitions de fonctions
programme principal
Voici une version qui fonctionne, à noter les 2 boucles pour réduire le nombre de lignes de création
de label_total_elec et de calcul de total_elec par année (lignes 21 et 55 )
Il faut dire que ton code est une vraie "usine à gaz " :-) :-)
en général, on structure comme ceci:
imports
définitions de fonctions
programme principal
Voici une version qui fonctionne, à noter les 2 boucles pour réduire le nombre de lignes de création
de label_total_elec et de calcul de total_elec par année (lignes 21 et 55 )
# -*- coding:Utf-8 -*- import sqlite3 import tkinter import tkinter as tk from tkinter import * from tkinter import messagebox, ttk from tkinter.ttk import Treeview #from tkcalendar import DateEntry def sum_elec(curs): ''' calcul des totaux annuels à partir des donnéees dans la table Electricté de la base données principale ''' global total_elec, total_elec_2021, total_elec_2022 find_sum_total_elec = "select sum(montant_facture_elec) from Electricite" curs.execute(find_sum_total_elec) total_elec_g = (curs.fetchone()[0]) print("Total global: ", total_elec_g) total_elec = {} for k in range(1,11): an = 2020+k sql_request = f'select sum(montant_facture_elec) from Electricite where date_facture_elec like "%'+str(an)+'"' curs.execute(sql_request) total_elec[an] = curs.fetchone()[0] print('total {} : {}€'.format(an,total_elec[an])) def appartement_database(): ''' Creation de la base de donnees principale pour enregistrer les données ''' connection = sqlite3.connect(BDD) curs = connection.cursor() curs.execute( "CREATE TABLE IF NOT EXISTS Electricite (Id INTEGER PRIMARY KEY, date_facture_elec TEXT, " "montant_facture_elec TEXT, Ref_facture_elec TEXT)") curs.execute("SELECT * FROM Electricite") sum_elec(curs) curs.close() connection.close() def calc_total_annuel(window_electricite): ''' Afficher dans la vue electricite les totaux annuels calculés ''' global total_elec, total_elec_2021,total_elec_2022 # création du frame pour accueillir les totaux annuels frame3 = ttk.LabelFrame(window_electricite, text="Total annuel", width=200, height=280) frame3.place(x=685, y=16) # création des labels avec les totaux annuels label_total_elec = {} yp=38 for k in range(1,11): an = 2020+k label_total_elec[an] = Label(window_electricite, text="Montant total {}: {} €".format(an, total_elec[an])) label_total_elec[an].place(x=700, y=yp) yp+=20 def treeview_for_electricite_database(window_electricite): '''création du treeview pour afficher les données de la table Electricite dans la base de données principale ''' global tree_elec connection = sqlite3.connect(BDD) curs = connection.cursor() curs.execute("SELECT * FROM Electricite") result_elec = curs.fetchall() for row in result_elec: tree_elec.insert('', 'end', values=(row[0], row[1], row[2], row[3])) curs.close() connection.close() def add_data_in_elec_table(): ''' Ajouter des données dans la table Electricite de la base de donnees Appartement ''' global entry_date_facture_elec, entry_montant_facture_elec, entry_reference_facture_elec, tree_elec date_facture_elec = entry_date_facture_elec.get() montant_facture_elec = entry_montant_facture_elec.get() reference_facture_elec = entry_reference_facture_elec.get() connection = sqlite3.connect(BDD) curs = connection.cursor() curs.execute("INSERT INTO Electricite (date_facture_elec, montant_facture_elec, Ref_facture_elec)" "VALUES(?,?,?)", (date_facture_elec, montant_facture_elec, reference_facture_elec)) connection.commit() for item in tree_elec.get_children(): tree_elec.delete(item) curs.execute("SELECT * FROM Electricite") result_elec = curs.fetchall() for row in result_elec: tree_elec.insert('', 'end', values=(row[0], row[1], row[2], row[3])) entry_montant_facture_elec.delete(0, END) entry_reference_facture_elec.delete(0, END) sum_elec(curs) curs.close() connection.close() def delete_data_in_elec_table(): ''' Supprime des données de la table ''' global tree_elec, window_electricite if not tree_elec.selection(): # Teste si une ligne a été sélectionnée avant d'exécuter l'instruction delete frame2 = Label(window_electricite, text="Veuillez sélectionner une ligne", fg="#F00020", font="Arial 12") frame2.place(x=85, y=270) frame2.after(3000, frame2.destroy) else: iid = tree_elec.focus() # Obtient l'iid de la ligne sélectionnée et qui a le focus sup_row = tree_elec.set(iid, "Id") tree_elec.delete(iid) connection = sqlite3.connect(BDD) curs = connection.cursor() curs.execute("DELETE FROM Electricite WHERE Id = ?", (sup_row,)) connection.commit() frame2 = Label(window_electricite, text="Facture supprimée", fg="#F00020", font="Arial 12") frame2.place(x=125, y=270) frame2.after(3000, frame2.destroy) # effacer le message après 3000 ms sum_elec(curs) # recalculer la somme totale curs.close() connection.close() def close_window_electricite(): window_electricite.destroy() def create_electricite_window(): global entry_date_facture_elec, entry_montant_facture_elec, entry_reference_facture_elec, window_electricite global tree_elec window_electricite = tkinter.Toplevel() window_electricite.title("Dépenses en électricité") window_electricite.geometry("900x400") window_electricite.resizable(width=False, height=False) appartement_database() calc_total_annuel(window_electricite) frame1 = ttk.LabelFrame(window_electricite, text="Electricité", width=370, height=280) frame1.place(x=15, y=16) # entree de la date de facture electricite label_date_facture_elec = Label(window_electricite, text="Date de la facture") label_date_facture_elec.place(x=30, y=50) entry_date_facture_elec = Entry(window_electricite, text='') entry_date_facture_elec.place(x=140, y=50) # entree du montant de la facture electricite label_montant_facture_elec = Label(window_electricite, text="Montant facture") label_montant_facture_elec.place(x=30, y=90) entry_montant_facture_elec = Entry(window_electricite, width=30) entry_montant_facture_elec.focus() entry_montant_facture_elec.place(x=140, y=90) # entree reference facture electricite label_reference_facture_elec = Label(window_electricite, text="Référence facture") label_reference_facture_elec.place(x=30, y=130) entry_reference_facture_elec = Entry(window_electricite, width=30) entry_reference_facture_elec.place(x=140, y=130) bouton1 = ttk.Button(window_electricite, text="Ajouter", command=add_data_in_elec_table) bouton1.place(x=30, y=180) bouton2 = ttk.Button(window_electricite, text="Supprimer", command=delete_data_in_elec_table) bouton2.place(x=132, y=180) bouton3 = ttk.Button(window_electricite, text="Modifier") bouton3.place(x=235, y=180) bouton4 = ttk.Button(window_electricite, text="Quitter", command=close_window_electricite) bouton4.place(x=30, y=220) treeview_for_electricite_database(window_electricite) tree_elec = Treeview(window_electricite, columns=("Id", "Date", "Montant", "Référence"), show="headings") tree_elec.heading('Id', text="Id") tree_elec.heading('Date', text="Date") tree_elec.heading('Montant', text="Montant") tree_elec.heading('Référence', text="Référence") tree_elec.column("Id", anchor=CENTER, width=20) tree_elec.column("Date", anchor=CENTER, width=70) tree_elec.column("Montant", anchor=CENTER, width=70) tree_elec.column("Référence", anchor=CENTER, width=70) tree_elec.place(x=420, y=25) #Programme principal BDD = "Appartement_database.db" main = tk.Tk() main.title("Gestion appartement") main.geometry("700x500") menubar = Menu(main) main.config(menu=menubar) menufichier = Menu(menubar) menubar.add_cascade(label="Fichier", menu=menufichier) menufichier.add_cascade(label='Exit', command=main.destroy) menuaffichage = Menu(menubar) menubar.add_cascade(label="Affichage", menu=menuaffichage) sub_menu = Menu(menuaffichage) sub_menu.add_command(label="Electricité", command=create_electricite_window) sub_menu.add_command(label="2") sub_menu.add_command(label="3") menuaffichage.add_cascade(label='Dépenses', menu=sub_menu) menuaffichage.add_command(label='Recettes', command=sub_menu) main.mainloop()
Merci pour ta réponse.
Le code complet est le suivant: