def __init__(self, items, geom): QWidget.__init__(self) self.setGeometry(geom) self.packRect = PackedRect(self.__grid, items) self.rectsToDraw = [] self.rectLabels = [] self.pen = QPen() self.pen.setColor(QColor(0xff, 0, 0))
class PackedRectTestWidget(QWidget): __grid = QRect(0,0,20,10) __pallete = (QColor(0xff, 0xff, 0xcf), QColor(0xc7,0xff,0xff), QColor(0xff, 0xe5, 0xe5), QColor(0xcc, 0xff, 0xcc) ) """ A widget simply existing for useful visual testing of what the PackedRect class is putting out """ def __init__(self, items, geom): QWidget.__init__(self) self.setGeometry(geom) self.packRect = PackedRect(self.__grid, items) self.rectsToDraw = [] self.rectLabels = [] self.pen = QPen() self.pen.setColor(QColor(0xff, 0, 0)) def __scaleToParentRect(self, rect): geom = QRectF(self.geometry()) xScale = geom.width() / self.__grid.width() yScale = geom.height() / self.__grid.height() return QRect(rect.x() * xScale, rect.y() * yScale, rect.width() * xScale, rect.height() * yScale) def mousePressEvent(self, mouseEvent): """ If I'm clicked, indicate the new selection""" if mouseEvent.button() == Qt.MouseButton.LeftButton: try: (item, rect) = self.packRect.next() scaledRect = self.__scaleToParentRect(rect) self.rectsToDraw.append(scaledRect) newLabel = QLabel(self) newLabel.setText(str(item.getLocalPercentage())+"%") newLabel.setGeometry(scaledRect) newLabel.show() self.rectLabels.append(newLabel) self.update() except StopIteration: pass def paintEvent(self, paintEvent): painter = QPainter(self) painter.setPen(self.pen) painter.setBackgroundMode(Qt.TransparentMode) brush = QBrush() painter.drawRect(self.geometry()) print "GOING TO DRAW..." print self.rectsToDraw for (iterNum, rect) in enumerate(self.rectsToDraw): brush.setColor(self.__pallete[iterNum % len(self.__pallete)]) brush.setStyle(Qt.SolidPattern) painter.setBrush(brush) painter.drawRect(rect)