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

GUI Python Discussion :

Tkinter et Matplotlib


Sujet :

GUI Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Tkinter et Matplotlib
    Bonjour à tous !

    Alors j'ai créer un programme ou il y a un graphique avec matplotlib mais j'aimerai pouvoir le "cacher" avec un place_forget() Le problème c'est que lorsque que je fais cela j'ai le message d'erreur suivant :

    AttributeError: 'FigureCanvasTkAgg' object has no attribute 'place_forget'

    Voici la portion de code concerné pour l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    f = Figure(figsize=(5,4), dpi=70, facecolor='none')
     
    canvas = FigureCanvasTkAgg(f, master=p2)
    canvas.get_tk_widget().place(x=150, y =200)
     
    toolbar = NavigationToolbar2TkAgg(canvas, p2)
    toolbar.place(x= 150, y=500)
    Et celle pour le "cacher" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toolbar.place_forget()
    canvas.place_forget()

    Merci de vos réponses !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Relisez le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'FigureCanvasTkAgg' object has no attribute 'place_forget'
    Si un objet de type FigureCanvasTkAgg n'a pas de méthode place_forget c'est qu'il n'est pas widget Tkinter.

    D'ailleurs quand vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.get_tk_widget().place(x=150, y =200)
    Vous appliquez la méthode .place au widget Tkinter associé à l'instance de FigureCanvasTkAgg et récupéré via l'appel canvas.get_tk_widget().

    Plus court d'écrire "en Python" que d'essayer de traduire en français, n'est-il pas?
    Mais écrire:
    est trop court.
    L'interpréteur ne va même pas essayer d'inventer le bout qui manque: il gueule "AttributeError".


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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci pour la réponse !

    En effet il manquait un bout de code, j'ai donc essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.get_tk_widget().place_forget()
    Et le message d'erreur est parti ! Par contre mon graphique ne s'enlève toujours pas :/. Que faire ?

    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Peut être que poster un code plus complet serait un bon début.
    Sans pouvoir "reproduire" ce que vous voyez autant discuter du sexe des anges.

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Mais je sais pas trop ce qui pourrait t'aider donc

    Tous le programme (en travaux) :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    from tkinter import *
    from tkinter import ttk
    import tkinter.font
    import PIL
    import numpy
    import matplotlib
    matplotlib.use('TkAgg')
    import matplotlib.pyplot as plt
    from matplotlib.figure import Figure
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    from math import sqrt
    import math
    import os
    clear = lambda: os.system('cls')
     
     
    #-------------------------------fonction pour les calculs---------------------------
     
    #Calcul du discriminant
    def discriminant():
        delta = float(b2.get())**2 - 4*float(a2.get())*float(c2.get())
        return delta
     
    #Recherche des racines
    def recherche_racines():
        delta = discriminant()
        #1 solution reelle
        if delta == 0:
            x= "%.2f" %(-float(b2.get()) / (2*float(a2.get())))
            Resultat.config(text = str(x))
        #2 solutions reelles
        elif delta > 0:
            racine_carre_delta = sqrt(delta)
            x1 = "%.2f" % (float(-float(b2.get()) + racine_carre_delta) / (2*float(a2.get())))
            x2 = "%.2f" %(float(-float(b2.get()) - racine_carre_delta) / (2*float(a2.get())))
            Resultat.config(text = str(x1)+str(x2))
        #2 solutions complexes
        elif delta < 0:
            racine_carre_delta = sqrt(-delta)
            x1 = complex(-float(b2.get()), racine_carre_delta) / (2*float(a2.get()))
            x2 = complex(-float(b2.get()), -racine_carre_delta) / (2*float(a2.get()))
            Resultat.config(text = str(x1)+str(x2))
     
    #Recherche coefficient directeur avec 2 points 
    def recherche_coefficient_directeur(x1,y1,x2,y2):
        return (y2-y1)/(x2-x1)
     
    #Equation de trajectoire d'une parabole
     
     
    #Fonction pour convertir les radians en degres
    def convertir_radians_degres(a):
        return a*math.pi/180
     
     
    def calcul_ordonnee_from_abscisse(x,z1,z2,z3):
        return z1*x*x + z2*x + z3
     
    #param:
    #a: angle alpha
    #v: vitesse initiale
    #h: hauteur de depart
    def recherche_coef_trajectoire():
        z1 = float("%.2f" % (-9.80665 / (2*float(a2.get())*float(a2.get())*(math.cos(convertir_radians_degres(float(b2.get())))*(math.cos(convertir_radians_degres(float(b2.get()))))))))
        z2 = float("%.2f" % math.tan(convertir_radians_degres(float(b2.get()))))
        z3 = float(c2.get())
     
        tabX = []
        tabY = []
     
        x = 0
     
        while(calcul_ordonnee_from_abscisse(x,z1,z2,z3) >= 0):
            tabX.append(x)
            tabY.append(calcul_ordonnee_from_abscisse(x,z1,z2,z3))
            x = x + 0.001
     
     
     
     
        f = Figure(figsize=(5,4), dpi=70)
        plt = f.add_subplot(111)
        plt.plot(tabX,tabY)
     
        canvas = FigureCanvasTkAgg(f, master=p2)
        canvas.get_tk_widget().place(x=150, y =200)
     
        toolbar = NavigationToolbar2TkAgg(canvas, p2)
        toolbar.update()
        toolbar.place(x= 150, y=500)
     
     
     
     
        # a tk.DrawingArea
     
        Resultat.config(text = "La trajectoire prise par l'objet nous donne l'equation suivante: " + str(z1) + "x² + " + str(z2) + "x + " + str(z3))
     
    #param:
    #x: abscisse de la courbe
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    #fonction pour changer le panneau de droite (p2)
     
    def mise_a_jour(event):
        if lP.curselection() == ('1',) :
            global presentation
            global a1
            global a2
            global b1
            global b2
            global c1
            global c2
            global button1
            global label_resultat
            global Resultat
            presentation.destroy()
            a1.place_forget()
            a2.place_forget()
            b1.place_forget()
            b2.place_forget()
            c1.place_forget()
            c2.place_forget()
            button1.place_forget()
            label_resultat.place_forget()
            Resultat.place_forget()
     
     
            presentation = Label(p2, text="Cette fonction vous permet d'obtenir l'équation de la parabole et sa représentation graphique,\nEntrez la vitesse, l'angle d'incidence et la hauteur de départ", justify=LEFT)
            presentation.place(x= 20, y=20)
     
            a1 = Label(p2, text="Entrez la vitesse en m/s :")
            a1.place(x= 50, y=80)
            a2 = Entry(p2)
            a2.place(x= 190, y=80)
     
            b1 = Label(p2, text="Entrez l'angle en degrés :")
            b1.place(x= 50, y=110)
            b2= Entry(p2)
            b2.place(x= 190, y=110)
     
            c1 = Label(p2, text="Entrez la hauteur en m :")
            c1.place(x= 50, y=140)
            c2 = Entry(p2)
            c2.place(x= 190, y=140)
     
            button1 = Button(p2, text='Calculer', command=recherche_coef_trajectoire)
            button1.place(height=50, width=100, x=360, y=95)
     
            label_resultat = Label(p2, text="Voici le résultat :")
            label_resultat.place(x=50, y=170)
     
            Resultat = Label(p2, text="je suis la ")
            Resultat.place(x=150, y=170)
     
        elif lM.curselection() == ('0',) :
            global presentation
            global a1
            global a2
            global b1
            global b2
            global c1
            global c2
            global button1
            global label_resultat
            global Resultat
            global canvas
            global toolbar
            presentation.destroy()
            a1.place_forget()
            a2.place_forget()
            b1.place_forget()
            b2.place_forget()
            c1.place_forget()
            c2.place_forget()
            button1.place_forget()
            label_resultat.place_forget()
            Resultat.place_forget()
     
            toolbar.place_forget()
            canvas.get_tk_widget().place_forget()
     
     
     
            #------------------------Equation second degré-------------------------
     
            presentation = Label(p2, text="Cette fonction vous permet d'obtenir les solutions d'une equation du second degré, pour ax² + bx + c,\nEntrez les valeurs a, b et c :", justify=LEFT)
            presentation.place(x= 20, y=20)
     
            a1 = Label(p2, text="Entrez a :")
            a1.place(x= 50, y=80)
            a2 = Entry(p2)
            a2.place(x= 110, y=80)
     
            b1 = Label(p2, text="Entrez b :")
            b1.place(x= 50, y=110)
            b2 = Entry(p2)
            b2.place(x= 110, y=110)
     
            c1 = Label(p2, text="Entrez c :")
            c1.place(x= 50, y=140)
            c2 = Entry(p2)
            c2.place(x= 110, y=140)
     
            button1 = Button(p2, text='Calculer', command=recherche_racines)
            button1.place(height=50, width=100, x=300, y=95)
     
            label_resultat = Label(p2, text="Voici le résultat :")
            label_resultat.place(x=200, y=300)
     
            Resultat = Label(p2, text="je suis la ")
            Resultat.place(x=300, y=300)
     
     
    #------------------------TKINTER-------------------------
     
     
    fenetre = Tk()
    fenetre.iconbitmap('icone.ico')
    fenetre.title("Calculator")
     
    police=tkinter.font.Font(fenetre, size=12, family='Helvetica')
     
    n = ttk.Notebook(fenetre)
    f1 = ttk.Frame(n,  width=900, height=570, padding=(10,10,10,10)); 
    f2 = ttk.Frame(n,  width=900, height=570, padding=(10,10,10,10)); 
    n.add(f1, text='Fonction')
    n.add(f2, text='Quizz')
    n.pack()
     
    s = ttk.Style()
    s.configure('My.TFrame', background='#D8D8D9')
     
    p = ttk.Panedwindow(f1, orient=HORIZONTAL)
    p1 = ttk.Labelframe(p, text='Choix Fonction', width=200, height=570)
    p2 = ttk.Labelframe(p, text='Fonctions', width=700, height=570); 
    p.add(p1)
    p.add(p2)
    p.pack()
     
     
     
    p2.pack_propagate(False)
     
     
    # Liste de fonction Mathématiques :
    titre_liste_fonctionM = Label(p1, text="Mathématiques :", )
    titre_liste_fonctionM.pack(anchor=W)
     
    lM = Listbox(p1, height=10, width=25)
    lM.bind("<ButtonRelease-1>", mise_a_jour)
    lM.pack()
     
     
     
    lM.insert(END,)
     
    for item in [" Equation 2nd Degré", " Coefficient directeur", " Fonction3", " Fonction4"]:
        lM.insert(END, item)
     
    fonction = ('test','dsdlkjg','fldiu')
     
    for i in range(0,len(fonction),2):
        lM.itemconfigure(i, background="#DDDDFF")
     
    i=lM.curselection()
    print(i)
     
     
    # Liste de fonction Physique :
     
    titre_liste_fonctionP = Label(p1, text="Physique :")
    titre_liste_fonctionP.pack(anchor=W)
     
    lP = Listbox(p1, height=10, width=25)
    lP.bind("<ButtonRelease-1>", mise_a_jour)
    lP.pack()
     
    lP.insert(END,)
     
    for item in [" Vitesse d'un satellite", " Equation d'une Parabole", " Fonction3", " Fonction4"]:
        lP.insert(END, item)
     
    fonction = ('test',recherche_coef_trajectoire,'fldiu')
     
    for i in range(0,len(fonction),2):
        lP.itemconfigure(i, background="#DDDDFF")
     
    label = Label(fenetre, text="CALCULATOR 2.5.5. Copyright 2001", font=police)
    label.pack()
     
    fenetre.resizable(width=False, height=False)
     
     
    #------------------------Panneau Courbe vitesse-------------------------
     
    presentation = Label(p2, text="Cette fonction vous permet d'obtenir l'équation de la parabole et sa représentation graphique,\nEntrez la vitesse, l'angle d'incidence et la hauteur de départ", justify=LEFT)
    presentation.place(x= 20, y=20)
     
    a1 = Label(p2, text="Entrez la vitesse en m/s :")
    a1.place(x= 50, y=80)
    a2 = Entry(p2)
    a2.place(x= 190, y=80)
     
    b1 = Label(p2, text="Entrez l'angle en degrés :")
    b1.place(x= 50, y=110)
    b2= Entry(p2)
    b2.place(x= 190, y=110)
     
    c1 = Label(p2, text="Entrez la hauteur en m :")
    c1.place(x= 50, y=140)
    c2 = Entry(p2)
    c2.place(x= 190, y=140)
     
    button1 = Button(p2, text='Calculer', command=recherche_coef_trajectoire)
    button1.place(height=50, width=100, x=360, y=95)
     
    label_resultat = Label(p2, text="Voici le résultat :")
    label_resultat.place(x=50, y=170)
     
    Resultat = Label(p2, text="je suis la ")
    Resultat.place(x=150, y=170)
     
     
    f = Figure(figsize=(5,4), dpi=70, facecolor='none')
     
    canvas = FigureCanvasTkAgg(f, master=p2)
    canvas.get_tk_widget().place(x=150, y =200)
     
    toolbar = NavigationToolbar2TkAgg(canvas, p2)
    toolbar.place(x= 150, y=500)
     
     
     
     
     
     
     
     
     
     
    fenetre.mainloop()

    Ligne 209 il y a le fameux canvas et le place_forget qui ne veut pas fonctionner !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Il manque trop de bouts à votre code pour pouvoir le faire fonctionner.

    Une lecture en diagonale me laisse penser que le canvas construit dans le callback recherche_coef_trajectoire n'est pas le canvas déclaré en "global". Le graphique s'affiche dans ce canvas là... Mais canvas.get_tk_widget().place_forget() ne tape pas sur le bon widget.

    A vous de voir comment corriger çà.

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

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    J'ai cherché en vain mais je ne trouve pas de solution ! Pouvez vous m'éclairer d'avantage ?

    Merci !

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Reprenez le code que vous avez posté.
    Cherchez les appels à FigureCanvasTkAgg.
    A chaque appel vous fabriquez un nouveau canvas.
    Quel est celui auquel est appliqué le .place_forget()?

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

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Un appel c'est bien quand je fais canvas = FigureCanvasTkAgg(f, master=p2) ?

    Dans ce cas là je l'appelle deux fois, un ligne 85 dans la fonction recherche_coef_trajectoire() et un ligne 355.

    Et si je suis l'ordre d’exécution du programme le place_forget() s'applique au canvas ligne 355.

    Je ne vois donc pas d’où le problème peux venir sachant que les noms concordent sauf pour le global mais si je met : global canvas.get_tk_widget() cela ne fonctionne pas !

    Que faire ?

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    La question est de savoir si vous voulez:
    - un seul canvas (pourquoi en créer deux via 2 appels à FigureCanvasTkAgg),
    - deux canvas et dans ce cas être sûr que vous appliquez .place_forget au bon.
    Impossible de corriger le code sans savoir ce que vous voulez.

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

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Et bien si j'en fais deux c'est parce que je n'ai pas le choix ! Est ce que vous avez lancé le programme ?

    Si oui vous avez vu que mon but est de pouvoir changer le panneau situé à droite en cliquant sur les "modes" dans les listes à gauche.

    Mais comme je souhaite qu'il y ai déjà quelque chose d'afficher au lancement du programme, il faut que je mette deux fois le contenu de ce qui sera afficher à l'ouverture du programme.

    Il existe peut être un meilleur moyen de faire ce que je souhaite ?

    J'espère m'être fais comprendre

    Merci.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par LittleBN Voir le message
    Et bien si j'en fais deux c'est parce que je n'ai pas le choix ! Est ce que vous avez lancé le programme ?
    hum, votre programme est aussi embrouillé que vos explications.
    Pour moi, il tourne avec plein d'erreurs mais il tourne.
    Est ce qu'il fait ce que vous voudriez?
    Probablement pas sinon vous ne râleriez pas ici.

    Si oui vous avez vu que mon but est de pouvoir changer le panneau situé à droite en cliquant sur les "modes" dans les listes à gauche.
    Lorsque je clique sur les options à gauche, le menu affiché à droite change parfois.

    Après essayer de comprendre par ou ça passe dans votre code, bonjour!
    C'est en fonction d'un index dans des listes lP, lM,...
    Il y a des variables globales partout avec des noms a1, a2,....
    Et le tout sur 400 lignes!

    C'est pas un reproche. Je faisais probablement pire à mes débuts.
    Mais a part tout reprendre calmement pour essayer de décortiquer ce que vous avez voulu faire, il m'est difficile de faire quelque chose avec votre code excepté "run" et croiser les doigts.

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

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Je comprend bien ce que vous voulez dire ! En effet c'est mon tout premier programme que je fais pour la nouvelle option ISN (Informatiques et Sciences du Numérique) en Terminale S. Mais les profs ne sont pas plus renseignés que nous !

    En effet les options à gauches ne sont pas encore toute disponible car je n'ai pas finis le programme (seulement Équation second degrés et Équation d'une parabole). Pour l'instant j'essaye de résoudre ce problème d'affichage.

    Les variables Global était nécessaire car sans elle j'obtiens un message d'erreur de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnboundLocalError: local variable 'presentation' referenced before assignment
    Si vous ne comprenez pas quelque chose dites le moi ! Mais ma vrai question est de pouvoir faire un affichage qui varie avec les options à gauches. Peut être que vous connaissez une méthode plus "réglementaire"

    Merci.

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Si vous ne comprenez plus ce que votre code fait, c'est bien dommage mais le mettre à la "poubelle" risque d'être la moins mauvaise solution. Vous ne refaites pas tout, vous essayez de mettre le truc "au propre".

    Cela fait on reconstruit comment? C'est le boulot de vos profs de vous expliquer cela. Ils ont du temps et en plus sont payés pour çà. Ici vous êtes dans un forum d'entre-aide ou les contributeurs ne peuvent pas passer des journées avec vous. En plus comme nous ne savons pas ce que vous avez appris, pas facile de vous proposer les constructions les plus digestes.

    La seule chose que je peux vous proposer est de découper votre truc en morceaux.
    Ces morceaux réalisent un s/ensemble des fonctionnalités attendues.
    Lorsque vous êtes "satisfait" du morceau vous l'assemblez, l'intégrer.

    Exemple "côté Figure", je suis amusé à améliorer l'exemple de la documentation matplotlib pour réaliser des fonctions qui font a peu près ce que vous attendez:
    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
    import matplotlib
    matplotlib.use('TkAgg')
    import math
     
    from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg,
                                                   NavigationToolbar2TkAgg)
    from matplotlib.figure import Figure
     
    import tkinter as tk
    from tkinter.constants import TOP, BOTH, BOTTOM, LEFT
     
    def figure_create(master=None):
     
        figure = Figure(figsize=(5,4), dpi=100)
        axe = figure.add_subplot(111)
     
        canvas = FigureCanvasTkAgg(figure, master=root)
        canvas.show()
        canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
     
        toolbar = NavigationToolbar2TkAgg( canvas, root )
        toolbar.update()
        canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
     
        figure._toolbar = toolbar
        return figure
     
    plotShift = 0
     
    def figure_draw(figure):
        global plotShift
        axe = figure.axes[0] 
        xVals = range(100)
        axe.plot(xVals, [math.sin(x + plotShift) for x in xVals])
        figure.canvas.draw()
        plotShift += 10
     
    def figure_clear(figure):
        axe = figure.axes[0]
        axe.clear()    
        figure.canvas.draw()
     
    def figure_hide(figure):
        figure.canvas.get_tk_widget().pack_forget() 
     
    def figure_show(figure):
        figure.canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
     
    root = tk.Tk()
    root.wm_title("Embedding in TK")
     
    figure = figure_create(master=root)
     
    frame = tk.Frame(root)
    tk.Button(frame, text='draw', command=lambda f=figure: figure_draw(f)).pack(side=LEFT)
    tk.Button(frame, text='clear', command=lambda f=figure: figure_clear(f)).pack(side=LEFT)
    tk.Button(frame, text='show', command=lambda f=figure: figure_show(f)).pack(side=LEFT)
    tk.Button(frame, text='hide', command=lambda f=figure: figure_hide(f)).pack(side=LEFT)
    frame.pack(side=BOTTOM)
    tk.mainloop()
    Vous vous rendez compte que ce que çà affiche est anecdotique comparé au reste.
    Et le reste est la "structure", i.e. le minimum syndical pour faire fonctionner afficher, masquer, dessiner, nettoyer,...
    Ce minimum n'est pas trivial: il faut lire la doc., tester, ...
    Et au plus vous allez ajouter des grigris sur votre interface utilisateur, au plus il y aura du monde pour faire le boulot derrière. Si la structure n'est pas assez solide, le machin va crouler sous son poids.

    Bon courage,

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

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci ! Votre exemple est parfait la fonction figure_hide() m'a permis de me rendre compte que j'avais effectivement oublié quelque chose !

    Dans la ligne figure.canvas.get_tk_widget().pack_forget() j'avais oublier de mettre figure au début ce qui faisait que ça ne marchais pas !

    Sinon je prend en note le conseille de ranger mon code et de réorganiser tout ça !

    Je considère le topic résolu ! Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/08/2014, 21h25
  2. problème de portabilité d'un programme avec tkinter et matplotlib
    Par rafoim dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 13/11/2013, 11h52
  3. plot de Matplotlib sous Tkinter?
    Par Invité dans le forum Tkinter
    Réponses: 7
    Dernier message: 28/02/2011, 13h22
  4. [matplotlib] Croubes dans une interface tkinter
    Par vinzzzz dans le forum Tkinter
    Réponses: 2
    Dernier message: 08/12/2006, 14h34
  5. [matplotlib][Tkinter] Conflit figure/Tk ?
    Par Panthère Bleue dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 12/07/2006, 08h48

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