Module 'matplotlib.pyplot' has no attribute 'set_canvas'

Fermé
Frewil - 5 janv. 2023 à 17:29
 Frewil - 6 janv. 2023 à 19:00

Bonjour,

avec le programme ci-joint, j'ai le message d'erreur: module 'matplotlib.pyplot' has no attribute 'set_canvas'

Je voudrais inserer le graphique matplotlib crée dans le canvas crée et malheureusement, je n''y arrive pas. Merci pour votre aide

Bonne soirée

import sqlite3
import tkinter as tk
import tkinter.ttk as ttk
from matplotlib.backends.backend_tkagg import FigureCanvasTk
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

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


# Création de la fenêtre principale

window = tk.Tk()
window.tk.call("source", "azure.tcl")
window.tk.call("set_theme", "light")

# Titre de la fenêtre
window.title("Ma fenêtre Tkinter")

# Taille de la fenêtre
window.geometry("800x500")

# Création de l'tab principal
tabs = ttk.Notebook(window)

# Création des tabs
tab1 = tk.Frame(tabs, width=780, height=400, bg="grey")
tab2 = tk.Frame(tabs, width=780, height=400, bg="grey")
tab3 = tk.Frame(tabs, width=780, height=400, bg="grey")
tab4 = tk.Frame(tabs, width=780, height=400, bg="grey")
tab5 = tk.Frame(tabs, width=780, height=400, bg="grey")
tab6 = tk.Frame(tabs, width=780, height=400, bg="grey")
tab7 = tk.Frame(tabs, width=780, height=400, bg="grey")
tab8 = tk.Frame(tabs, width=780, height=400, bg="grey")

# Ajout des tabs à la tab principal
tabs.add(tab1, text="tab 1")
tabs.add(tab2, text="tab 2")
tabs.add(tab3, text="tab 3")
tabs.add(tab4, text="tab 4")
tabs.add(tab5, text="tab 5")
tabs.add(tab6, text="tab 6")
tabs.add(tab7, text="tab 7")
tabs.add(tab8, text="tab 8")

# Modification de la taille de la police des titres des tabs
style = ttk.Style(tabs)
style.configure("light.TNotebook", font=("Arial", 12))

# Positionnement de la tab principal

tabs.place(x=10, y=10)

# call a graph from Chaudiere.py
# création / connection à la base de données Chaudiere
connection = sqlite3.connect('Chaudiere.db')  # creation et connection à la base de données
connection.cursor()

# lire les données de la table 'Temperature'
data_graph_temp_ext = pd.read_sql('SELECT * FROM Temperature', connection)

# Convertit la colonne 'Date_heure' en un objet 'datetime'
data_graph_temp_ext['Date_heure'] = pd.to_datetime(data_graph_temp_ext['Date_heure'], format='%d/%m/%Y %H:%M')

# Convertit la colonne 'Température' en float
data_graph_temp_ext['Temperature_exterieure'] = data_graph_temp_ext['Temperature_exterieure'].astype(
    float).astype(
    float)

# Spécifie la taille de la fenêtre du graphique
plt.figure(figsize=(3, 2))

# Tracer le graphique de la température extérieure
plt.plot(data_graph_temp_ext['Date_heure'], data_graph_temp_ext['Temperature_exterieure'])

# Ajuste les limites de l'axe y et les pas entre les valeurs y
plt.ylim(-20, 40)
plt.yticks(np.arange(-20, 40, 5))

# Utilise la liste de labels avec la fonction plt.xticks()
plt.xticks(data_graph_temp_ext['Date_heure'], data_graph_temp_ext['Date_heure'].dt.strftime('%d/%m/%Y %H:%M'),
           rotation=45)

# augmente l'espace entre le label x et la fin de la fenêtre
plt.subplots_adjust(bottom=0.2)

# Crée un titre pour le graphique
plt.title("Température extérieure")

# Modifie la taille des étiquettes de l'axe x
plt.tick_params(axis='x', labelsize=6)

# Modifie la taille des étiquettes de l'axe y
plt.tick_params(axis='y', labelsize=6)

# Crée une étiquette pour l'axe x
plt.xlabel('Date et Heure')

# Crée une étiquette pour l'axe y
plt.ylabel('Température')

# Créer un objet FigureCanvasTk pour dessiner la figure dans le canvas.
figure_canvas = FigureCanvasTk(plt, master=tab1)

# Empaqueter l'objet FigureCanvasTk et afficher le canevas
figure_canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
figure_canvas.place(x=10, y=10)

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


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

# Lancement de la boucle Tkinter qui attend les événements utilisateur

window.mainloop()


Windows / Chrome 108.0.0.0

1 réponse

Diablo76 Messages postés 161 Date d'inscription vendredi 25 novembre 2022 Statut Membre Dernière intervention 1 mai 2024 41
Modifié le 11 janv. 2023 à 12:02

Salut,

Il faut utiliser :

from matplotlib.figure import Figure

à la place de :

import matplotlib.pyplot as plt

Tu peux t'inspirer de cet exemple.

2

Merci beaucoup, je vais essayer

0