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