p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    août 2010
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : août 2010
    Messages : 285
    Points : 396
    Points
    396

    Par défaut Matplotlib - FigureCanvasTkAgg - Embedded graph

    Bonjour tout le monde,

    Je développe en ce moment un petit outil en python. Après avoir finaliser la partie "solver" je me suis attaqué à l'interface. Je cherche à faire quelque chose de simple et sans prétention. Je me suis donc tourné vers tkinter qui est très documenté.

    Dans cette interface je fais apparaître dans une fenêtre les résultats du solver sous la forme d'un graph généré avec Matplotib. Pour cela j'utilise les quelques lignes suivantes (code partiel):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from Tkinter import *
    import ttk
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
     
    root = Tk()
    mainFrame = Frame(root,width=700,height=500)
    GraphBox = Frame(mainFrame,width=500,height=450,bg='white')
     
    canvas = FigureCanvasTkAgg(Figure, master=GraphBox)
    canvas._tkcanvas.pack()
    Ici "Figure" est le graph en question. ça fonctionne merveilleusement bien. Mon seul soucis c'est lors de la fermeture de l'application, python crash avec le message suivant:

    Fatal Python error: PyEval_RestoreThread: NULL tstate

    Une rapide recherche Google m'a appris que ce message d'erreur est en lien avec une API C en lien avec la méthode employée pour afficher le graph.

    Est-ce que vous auriez une idée plus précise sur la question, parce que j'avoue humblement ne pas être calé en programmation.

    Merci!

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 670
    Points : 10 272
    Points
    10 272

    Par défaut

    Salut,
    Relisez la documentation.
    Dans l'exemple donné, il y a ces commentaires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def _quit():
        root.quit()     # stops mainloop
        root.destroy()  # this is necessary on Windows to prevent
                        # Fatal Python Error: PyEval_RestoreThread: NULL tstate
     
    button = Tk.Button(master=root, text='Quit', command=_quit)
    button.pack(side=Tk.BOTTOM)
    Tk.mainloop()
    # If you put root.destroy() here, it will cause an error if
    # the window is closed with the window manager.
    Ya+ka
    - W
    Architectures Post-Modernes

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    août 2010
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : août 2010
    Messages : 285
    Points : 396
    Points
    396

    Par défaut

    Merci beaucoup Wiztricks.

    J'étais passé à côté effectivement.. Pas d'excuse! J'ai une démo à faire lundi matin et il me reste pas mal de petite choses à modifier/corriger, mais au moins l'appli ne crashera pas!

    Merci encore!

    Ju

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    6 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 6 670
    Points : 10 272
    Points
    10 272

    Par défaut

    Je vous imagine bien le nez dans le guidon à essayer de finaliser votre démo. C'est une période de stress et de solitude plus propice à maudire la terre entière qu'à prendre le temps de revisiter les fondamentaux.
    Bon courage pour lundi.
    - W
    Architectures Post-Modernes

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    août 2010
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : août 2010
    Messages : 285
    Points : 396
    Points
    396

    Par défaut

    Merci!

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

Discussions similaires

  1. matplotlib modifier attribut graph
    Par membreComplexe12 dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 23/10/2014, 09h55
  2. matplotLib : rafraichir un graph
    Par yanouil dans le forum Général Python
    Réponses: 0
    Dernier message: 17/10/2014, 17h05
  3. Autoscale graphe matplotlib
    Par foufounegirl dans le forum PyQt
    Réponses: 1
    Dernier message: 16/11/2011, 14h49
  4. Enregistrer un graph Matplotlib
    Par Dramac dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 08/04/2009, 16h00
  5. [matplotlib] dessiner graph avec pcolor
    Par thibaultG dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 02/04/2008, 08h45

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