Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre éclairé
    Homme Profil pro julien N
    Ingénieur
    Inscrit en
    août 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Nom : Homme julien N
    Localisation : France

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

    Informations forums :
    Inscription : août 2010
    Messages : 229
    Points : 309
    Points
    309

    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 :
    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
    5 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 519
    Points : 8 330
    Points
    8 330

    Par défaut

    Salut,
    Relisez la documentation.
    Dans l'exemple donné, il y a ces commentaires:
    Code :
    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 julien N
    Ingénieur
    Inscrit en
    août 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Nom : Homme julien N
    Localisation : France

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

    Informations forums :
    Inscription : août 2010
    Messages : 229
    Points : 309
    Points
    309

    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
    5 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 519
    Points : 8 330
    Points
    8 330

    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 julien N
    Ingénieur
    Inscrit en
    août 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Nom : Homme julien N
    Localisation : France

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

    Informations forums :
    Inscription : août 2010
    Messages : 229
    Points : 309
    Points
    309

    Par défaut

    Merci!

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •