[Python] Problème Pmw et Matplotlib

Résolu/Fermé
Gozmo Messages postés 79 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 13 septembre 2012 - 5 oct. 2008 à 16:23
Gozmo Messages postés 79 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 13 septembre 2012 - 11 oct. 2008 à 00:05
Bonjour,

Impossible de poster un nouveau sujet depuis hier (enc e qui me concerne du moins)?

Désolé, jusqu'içi, ca ne marchais pas...

Donc mon problème:

Devant générer des diagrammes circulaires avec Python 2.5, je me suis tourné vers Matplotlib, qui exauce parfaitement mes voeux (fonction pie()). Le problème: la mise en page utilise Pmw (ScrolledFrame() en particulier), et là, ça déraille...

Le code:

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import Image, ImageTk, ImageDraw
import Tkinter, tkFileDialog
import Pmw
import matplotlib.pylab as plt

class Traitement(Tkinter.Tk):

    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.geometry("700x500")
        self.frameSaisie = Pmw.ScrolledFrame(self,usehullsize=1,hull_width=1000,
                                       hull_height=600,
                                       borderframe=1,
                                       borderframe_borderwidth=1)
        self.frameSaisie.configure(vscrollmode='static',hscrollmode='none')
        self.frameSaisie.grid(row=0, column=0, rowspan=2)
        self.trait = [0.0,23,45,12,11,9]
        self.graph = DiagCirculaire(titre='T45', trait=self.trait, parent=self.frameSaisie.interior())
        self.graph.grid(row=0,column=0)

class DiagCirculaire(Tkinter.Canvas):
    "Dessine les camembert pour les traits ecologique"

    def __init__(self,titre,trait,parent):
        Tkinter.Canvas.__init__(self,parent,height=200,width=200)
        self.titre = titre
        self.parent = parent
        self.donnee = trait
        self.initialize()

    def initialize(self):
        plt.figure(1, figsize=(2,2))
        ax = plt.axes([0.1, 0.1, 0.8, 0.8])

        explode=(0, 0.05, 0,0,0,0)
        plt.pie(self.donnee, shadow=True)

        plt.savefig(self.titre+'.png')

        self.image = Image.open(self.titre+'.png')
        self.image = ImageTk.PhotoImage(self.image)
        self.create_image(100,100, image = self.image)

if __name__ == "__main__":
    app = Traitement(None)
    app.title('Graphe2')
    app.configure(bg = "#ffffff")
    app.mainloop()




et l'erreur obtenue:

Traceback (most recent call last):
  File "diag_circu.py", line 49, in <module>
    app = Traitement(None)
  File "diag_circu.py", line 18, in __init__
    borderframe_borderwidth=1)
  File "/usr/lib/python2.5/site-packages/Pmw/Pmw_1_3/lib/PmwScrolledFrame.py", line 115, in __init__
    self._horizScrollbar.set(0.0, 1.0)
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 2802, in set
    self.tk.call((self._w, 'set') + args)
_tkinter.TclError: expected floating-point number but got "0.0"




J'ai essayé de changer la méthode d'import (import pylab, import pylab as plt...) sans succés. Dans les doc et sur Google, je n'ai rien trouvé qui s'approche de ce problème.

Quelqu'un a t il une explication? Encore mieux, une solution? Ou une piste pour créer des diagrammes circulaires autrement?

Merci

Goz

1 réponse

Gozmo Messages postés 79 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 13 septembre 2012
11 oct. 2008 à 00:05
Finalement j'ai résolu mon problème en faisant les diagrammes circulaires "à la main" dans un canvas Tkinter (je ne sais pas pourquoi ça me semblait difficile...). Je posterais le code quand ce serat au point (sauf si c'est inutile ?)

Bonne soirée
-1