Bonjour,

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:
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
#!/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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
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.

Les versions: Matplotlib 0.91.2, Pmw 1.3.2-3

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

Merci

Goz

Ubuntu 8.04