IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Taille d'un graph mathplotlib dans frame TKinter


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    passioné
    Inscrit en
    Avril 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : passioné

    Informations forums :
    Inscription : Avril 2018
    Messages : 7
    Par défaut Taille d'un graph mathplotlib dans frame TKinter
    Bonjour à tous, je viens vers vous aujourd'hui car j'ai un problème de taille ! (c'est marrant ça...)

    Je cherche un afficher un graphique mathplotlib dans une frame tkinter jusque la tout va bien j'y arrive :
    Nom : Capture d'écran 2023-09-07 214300.png
Affichages : 237
Taille : 30,4 Ko

    Mais le problème est que en ajoutant le graphique, la frame de droite (en rouge) n'as plus la bonne largeur, voici la largeur que je voudrais :
    Nom : Capture d'écran 2023-09-07 215209.png
Affichages : 207
Taille : 47,0 Ko

    J'ai passé pas mal de temps sur la doc de mathplotlib mais à part définir la taille de la figure en dur dans le code avec figsize je n'ai pas trouvé comment faire... :'(

    Voici le code de ma view :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    import tkinter as tk
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
     
     
    class StatsFrame(tk.Frame):
        def __init__(self, parent):
            super().__init__(parent)
            self.controller = None
            self.number_of_stat_row = 7
            self.row_weight = 3
     
            self.grid_config()
     
        def set_controller(self, controller):
            self.controller = controller
            self.create_widgets()
     
        def grid_config(self):
            self.configure(background="red", padx=10, pady=10)
            self.grid(row=0, column=1, sticky=tk.N + tk.S + tk.E + tk.W)  # position de la frame dans son parent
            self.grid_rowconfigure(0, weight=1)  # title row
            self.grid_rowconfigure(8, weight=1)  # graph row
            self.configure_rows()
     
        def configure_rows(self):
            for i in range(self.number_of_stat_row):
                self.grid_rowconfigure(i + 1, weight=self.row_weight)
            self.grid_columnconfigure(0, weight=1)
     
        def create_widgets(self):
            self.create_title_row()
            self.create_label()
            # self.create_graph()
     
        def create_title_row(self):
            title_label = tk.Label(self, text="STATISTIQUE")
            title_label.grid(row=0)
     
        def create_label(self):
            labels_data = [
                ("Montant deposé", self.controller.get_montant_depose(), "€", 1),
                ("Montant investi", self.controller.get_montant_investi(), "€", 2),
                ("Taux moyen", self.controller.get_taux_moyen(), "%", 3),
                ("Interet net total", self.controller.get_interet_totaux(), "€", 4),
                ("Interet mensuel moyen", self.controller.get_average_monthly_interest(), "€", 5),
                ("Durée moyenne", self.controller.get_average_duration(), "mois", 6),
                ("Exposition max", self.controller.get_max_exposure(), "%", 7)
            ]
     
            for label_text, value, unit, row in labels_data:
                label = tk.Label(self, text=f"{label_text} : {round(value, 2)}{unit}")
                label.grid(row=row, sticky="NESW", pady=5)
     
        def create_graph(self):
            fig, ax = plt.subplots(facecolor='lightskyblue', dpi=100)
     
            x = [1, 2, 3, 4]
            ax.pie(x, radius=3, center=(4, 4), wedgeprops={"linewidth": 1, "edgecolor": "white"}, frame=True)
            canvas = FigureCanvasTkAgg(fig, self)
            canvas.draw()
            canvas.get_tk_widget().grid(row=8)
    Si vous avez une idée, une solution, ou même juste un lien avec RTFD comme message ça me va !

    Merci d'avance !
    MagretsDeCanard

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 683
    Par défaut
    Citation Envoyé par MagretsDeCanard Voir le message
    Si vous avez une idée, une solution, ou même juste un lien avec RTFD comme message ça me va
    Si on affiche via grid une colonne de widgets de taille différentes, la largeur de la colonne sera celle du widget "le plus large".
    Et si on dit à grid que les widgets doivent occuper toute la case (à coup de sticky).... ben, il le fait!

    Pour le reste, la solution est à construire! Par exemple, pourquoi ajouter le Canvas qui contient le graphique dans la même Frame que le tas de Labels? Une autre Frame à côté éviterait de perturber la disposition. Vous pourriez aussi ajouter les Labels dans le Canvas...
    A vous de trouver une idée pour que ce qu'on voit s'afficher corresponde à ce que vous souhaitez.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Python 3.X] tkinter .pack() - Probleme d'alignement bouton dans frame
    Par 4nico20 dans le forum Général Python
    Réponses: 5
    Dernier message: 15/09/2022, 13h52
  2. [Python 3.X] Modifier la taille d'un graphe dans une figure
    Par yayator38 dans le forum Général Python
    Réponses: 3
    Dernier message: 09/05/2016, 17h42
  3. Réponses: 1
    Dernier message: 22/12/2013, 23h48
  4. [VB.NET] Taille differente pour chaque colonne dans DATAGRID
    Par stephane93fr dans le forum Windows Forms
    Réponses: 14
    Dernier message: 12/01/2005, 16h50
  5. Réponses: 3
    Dernier message: 15/04/2004, 08h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo