= QtSektorivalikko = == Tavoite == Komponentti sektorivalikolle. {{attachment:sektorivalikko001.png}} == Satunnaista koodia == Tiedosto [[http://wiki.ubuntu-fi.org/aiColorsPy|aiColors.py]] Tiedosto sectormenus.py: {{{#!python class SectorMenu(QGraphicsItem): def __init__(self, position, scene, matrix=QMatrix(),parent=None): super(SectorMenu, self).__init__() self.penW=2 self.parent=parent self.setFlags(QGraphicsItem.ItemIsSelectable| QGraphicsItem.ItemIsFocusable) self.innerRadius=16.0 self.outerRadius=42.0 r=self.innerRadius R=self.outerRadius self.outerRect=QRectF(-R, -R, 2*R, 2*R) self.innerRect=QRectF(-r, -r, 2*r, 2*r) self.sectors=self.calcSectors() self.setPos(position) #self.setPos(QPointF(0.0,0.0)) self.setMatrix(matrix) scene.clearSelection() scene.addItem(self) self.setSelected(True) self.setFocus() self.setAcceptsHoverEvents(True) def calcSectors(self): sectors=[] for start,angle in [(0,60),(70,60),(140,60),(210,60),(280,60)]: startAngle = start#*16 spanAngle = angle#*16 # go radians start=pi*start/180 angle=pi*angle/180 r=self.innerRadius+self.penW/2.0 R=self.outerRadius-self.penW/2.0 #x=position.x(); y=position.y() x=0.0; y=0.0 P1=QPointF(x+r*cos(start),y-r*sin(start)) P2=QPointF(x+R*cos(start),y-R*sin(start)) P3=QPointF(x+r*cos(start+angle),y-r*sin(start+angle)) P4=QPointF(x+R*cos(start+angle),y-R*sin(start+angle)) #sectors.append((startAngle, spanAngle, P1,P2,P3,P4)) # find the path: path=QPainterPath() path.moveTo(P1) path.lineTo(P2) path.arcTo(self.outerRect, startAngle, spanAngle) #path.arcTo(self.innerRect, startAngle, spanAngle) #path.moveTo(P3) path.lineTo(P4) #path.arcTo(self.outerRect, startAngle, spanAngle) path.arcTo(self.innerRect, startAngle+spanAngle, -spanAngle) sectors.append(path) return sectors def shape(self): path=QPainterPath() for s in self.sectors: path.addPath(s) return path def boundingRect(self): return self.outerRect def hoverMoveEvent(self, event): print "hoverMoveEvent ", random.uniform(-100,100) def paint(self, painter, option, widget): pen = QPen(Qt.SolidLine) pen.setColor(aiColor(idx=22)) pen.setWidth(self.penW) painter.setPen(pen) i=0 #for startAngle,spanAngle,P1,P2,P3,P4 in self.sectors: for s in self.sectors: i+=3 pen.setColor(aiColor(idx=i));painter.setPen(pen) painter.setBrush(aiColor(idx=i)) painter.strokePath(s,pen) painter.drawPath(s); }}} == Keskustelua == '''Snifi:''' -- Voiko koodin taustaväriä muuttaa vähän iloisemmaksi (esim vaaleanharmaa)?