Erreur: maximum recursion depth exceeded in __instancecheck
Fermémamiemando Messages postés 33338 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 6 novembre 2024 - 17 févr. 2023 à 13:14
- Recursionerror: maximum recursion depth exceeded in __instancecheck__
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur g030 - Forum Bbox Bouygues
- Erreur 10016 epson - Forum Imprimante
4 réponses
11 févr. 2023 à 10:43
Bonjour
ben le message est clair, la fonction récursive update_label_chauff_2 (parce qu'elle s'appelle elle-même) s'appelle à l'infini et au bout d'un moment atteint les limites du système.
Quand on écrit une fonction récursive, il y a 2 règles à respecter (et là c'est pas le cas)
- il doit y avoir une clause qui arrête la récursivité
- chaque appel récursif doit converger vers cette clause
Ça a déjà été débattu longuement récemment, je t'invite donc à lire ce sujet https://forums.commentcamarche.net/forum/affich-37788419-appel-d-une-fonction-recursive#p37789977
Merci beaucoup.
J'ai revu tout mon code et maintenant il est différent. Cependant je n'arrive pas à voir le label nommé "label_chauff_2" se mettre à jour.
A votre avis, cela pourrait venir de quelle erreur?
Merci
import tkinter as tk import tkinter.ttk as ttk from PIL import Image from PIL import ImageTk from colorama import Fore, Style import datetime from pyModbusTCP.client import ModbusClient window = tk.Tk() class chauffage: def __init__(self): # variables globales de la class datetime_object = datetime.datetime.now() self.date_heure = ( datetime_object.strftime('%d/%m/%Y') + " " + datetime_object.strftime("%H:%M") ) self.date = datetime_object.strftime('%d/%m/%Y') self.heure = datetime_object.strftime("%H:%M") def tab_chauffage(self): chauffage = tk.Frame(tabs, width=900, height=520, bg="grey") tabs.add(chauffage, text="Chauffage") # Creation d'un frame principal dans la chauffage frame_principal_chauffage = tk.Frame( chauffage, width=880, height=500, bg="white" ) frame_principal_chauffage.place(x=10, y=10) # Ouverture de l'image chauffage.jpg synoptique_chauffage = Image.open("chauffage.jpg") # redimenssioner l'image synoptique_chauffage_resized = synoptique_chauffage.resize((710, 490)) # convertir l'image en image tkinter backgroud_chauffage = ImageTk.PhotoImage(synoptique_chauffage_resized) # creation d'un label_chauff_1 dans le frame principal # de la tab 1 pour y afficher l'image chauffage.jpg label_chauff_1 = tk.Label( frame_principal_chauffage, image=backgroud_chauffage ) label_chauff_1.image = backgroud_chauffage # afficher et positionner l'image dans le label_chauff_1 crée précédement # Modification de la taille de la police des titres des tabs style = ttk.Style(tabs) style.configure("light.TNotebook", font=("Arial", 12)) label_chauff_1.place(x=50, y=10) # my_variable = 25 label_chauff_2 = ttk.Label( frame_principal_chauffage, text="Date et heure: " + self.date_heure, background="lightblue" ) label_chauff_2.place(x=550, y=350) def connect_chaudiere_et_lecture_registres(self): # --------------- initialisation de la connexion Modbus ----------------- print(Fore.LIGHTBLUE_EX + "*** Initialisation de la connection Modbus ***") print(Style.RESET_ALL) # annuler le style de couleur du texte adresseIP = "192.168.0.11" c = ModbusClient() c.host = adresseIP c.port = 502 if c.open(): # vérifie si la connection est active print(Fore.GREEN + "Connexion Modbus initialisée") print(Fore.GREEN + "Connecté à l'adresse IP ", adresseIP, "\n") print(Style.RESET_ALL) # annuler les tyle de couleur du texte print(Fore.YELLOW + "le", self.date, "à", self.heure) print(Style.RESET_ALL) # annuler le style de couleur du texte # Lisez les registres 0 à 10 registers = c.read_holding_registers(0, 50) # Affichez les valeurs lues print(registers) c.close() else: print(Fore.RED + "Impossible de se connecter à l'adresse IP ", adresseIP) print(Fore.RED + "Code erreur: ", c.last_error_as_txt) print(Style.RESET_ALL) # annuler le style de couleur du texte print("--" * 80) def update_chauffage(self): self.connect_chaudiere_et_lecture_registres() window.after(1000, self.update_chauffage) window.update def ouvrir_fichier(): # À compléter pass def enregistrer_fichier(): # À compléter pass def aide(): # À compléter pass def annuler(): # À compléter pass def retablir(): # À compléter pass def tab_2(): # Création des tabs dans la tab principale et ajout de celles-ci tab2 = tk.Frame(tabs, width=900, height=520, bg="grey") tabs.add(tab2, text="tab 2") # Modification de la taille de la police des titres des tabs style = ttk.Style(tabs) style.configure("light.TNotebook", font=("Arial", 12)) def tab_3(): # Création des tabs dans la tab principale et ajout de celles-ci tab3 = tk.Frame(tabs, width=900, height=520, bg="grey") tabs.add(tab3, text="tab 3") # Modification de la taille de la police des titres des tabs style = ttk.Style(tabs) style.configure("light.TNotebook", font=("Arial", 12)) def tab_4(): # Création des tabs dans la tab principale et ajout de celles-ci tab4 = tk.Frame(tabs, width=900, height=520, bg="grey") tabs.add(tab4, text="tab 4") # Modification de la taille de la police des titres des tabs style = ttk.Style(tabs) style.configure("light.TNotebook", font=("Arial", 12)) # Création du menu "Fichier" menu_fichier = tk.Menu(window, tearoff=0) menu_fichier.add_command(label="Ouvrir", command=ouvrir_fichier) menu_fichier.add_command(label="Enregistrer", command=enregistrer_fichier) menu_fichier.add_separator() menu_fichier.add_command(label="Quitter", command=window.destroy) # Création du menu "Edition" menu_edition = tk.Menu(window, tearoff=0) menu_edition.add_command(label="Annuler", command=annuler) menu_edition.add_command(label="Rétablir", command=retablir) # Création du menu "Aide" menu_aide = tk.Menu(window, tearoff=0) menu_aide.add_command(label="Aide", command=aide) def a_propos(): # Création de la fenêtre secondaire window_a_propos = tk.Tk() window_a_propos.tk.call("source", "azure.tcl") window_a_propos.tk.call("set_theme", "light") window_a_propos.title("À propos de") # Texte à afficher dans la fenêtre texte = "\nProgramme rédigé par Frédéric Willauer\nVersion 1.00 - Janv 2023\n" label = tk.Label(window_a_propos, text=texte) # Taille de la fenêtre window_a_propos.geometry("350x120") label.pack() # Bouton "Fermer" qui ferme la fenêtre lorsqu'il est cliqué bouton_fermer = tk.Button( window_a_propos, text="Fermer", command=window_a_propos.destroy ) bouton_fermer.pack() def creation_des_menus(window, menu_aide, menu_fichier, menu_edition): # Création du sous-menu "À propos de" menu_a_propos = tk.Menu(menu_aide, tearoff=0) menu_a_propos.add_command(label="À propos de", command=a_propos) # Ajout du sous-menu "À propos de" au menu "Aide" menu_aide.add_cascade(label="Aide", menu=menu_a_propos) # Ajout du sous-menu A propos de au menu Aide menu_aide.add_cascade(label="A propos de", menu=menu_a_propos) # Création de la barre de menu barre_menu = tk.Menu(window) barre_menu.add_cascade(label="Fichier", menu=menu_fichier) barre_menu.add_cascade(label="Edition", menu=menu_edition) barre_menu.add_cascade(label="Aide", menu=menu_aide) window.config(menu=barre_menu) ######### PROGRAMME PRINCIPAL ######### # Instanciation des classes instance_chauffage = chauffage() # faire en sorte que la fenetre s'adapte automatiquement à la taille de l'ecran w, h = window.winfo_screenwidth(), window.winfo_screenheight() window.geometry("%dx%d" % (w, h)) # appel du theme de la fenetre window.tk.call("source", "azure.tcl") window.tk.call("set_theme", "light") # Titre de la fenêtre window.title("Domotique") # Création de la tab principale tabs = ttk.Notebook(window) # Positionnement de la tab principale dans la fenetre "window" tabs.place(x=10, y=10) # appel des fonctions instance_chauffage.tab_chauffage() instance_chauffage.connect_chaudiere_et_lecture_registres() instance_chauffage.update_chauffage() tab_2() tab_3() tab_4() menu_aide = tk.Menu(window, tearoff=0) menu_fichier = tk.Menu(window, tearoff=0) menu_edition = tk.Menu(window, tearoff=0) creation_des_menus(window, menu_aide, menu_fichier, menu_edition) window.mainloop()
11 févr. 2023 à 14:11
Salut,
Je pense que tu t'eme!les les pédales, garde ta base en procédurale avant de passer en POO,
17 févr. 2023 à 13:14
Bonjour,
Peux-tu faire un exemple minimal qui met en évidence ton problème et préciser l'erreur ou le comportement attendu ?
Bonne chance