00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 from PyQt4.QtGui import *
00019 from AbstractGraphicsChartItem import *
00020 
00021 
00022 class PieChartSector(QGraphicsEllipseItem):
00023         def __init__(self, parent):
00024                 QGraphicsEllipseItem.__init__(self, parent)
00025 
00026 class GraphicsPieChartItem(AbstractGraphicsChartItem):
00027         def __init__(self, parent=None):
00028                 AbstractGraphicsChartItem.__init__(self, parent)
00029 
00030         def setValues( self, values ):
00031                 self.clear()
00032                 values = flatten(values)
00033                 self._values = values
00034                 self.updateChart()
00035 
00036         def updateChart(self):
00037                 self.clear()
00038                 total = sum(self._values)
00039                 if total == 0:
00040                         return
00041 
00042                 lastAngle = 0
00043                 manager = ColorManager( len(self._values) )
00044                 for i in range(len(self._values)):
00045                         value = self._values[i]
00046                         angle = ( value / total ) * ( 360 * 16 )
00047                         
00048 
00049                         item = PieChartSector( self )
00050                         percent = 100 * ( value / total )
00051                         if i < len(self._labels):
00052                                 item.setToolTip( '%s: %.2f (%.2f%%)' % (self._labels[i], value, percent ) )
00053                         item.setBrush( manager.brush(i) )
00054                         item.setPen( manager.pen(i) )
00055                         size = min( self._size.width(), self._size.height() )
00056                         item.setRect( 0, 0, size, size )
00057                         item.setStartAngle( lastAngle )
00058                         item.setSpanAngle( angle )
00059                         self.addToGroup( item )
00060                         self._items.append( item )
00061 
00062                         lastAngle += angle
00063 
00064         def setData(self, data):
00065                 
00066                 
00067                 labels = []
00068                 values = []
00069                 for x in data:
00070                         labels.append( x['name'] )
00071                         values.append( x['value'] )
00072                 self.setValues( values )
00073                 self.setLabels( labels )
00074