def __init__(self, parent):
        QPushButton.__init__(self, parent)

        self._cancelled = False
        self._originalColor = None
        self._color = QColor('black')
        self._colorPickerWidget = ColorPickerWidget(self)
        self._colorPickerWidget.setWindowFlags(Qt.Popup)
        self._colorPickerWidget.hide()
        self._colorPickerWidget.installEventFilter(self)
        self._colorPickerWidget.resize(80, 80)
        self.refresh()

        self._colorPickerWidget.colorChanged.connect(self.refresh)
        self.clicked.connect(self.togglePopup)
    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)

        painter.setPen(Qt.black)

        # create the hue rect
        hrect = self.hueRect()

        # create the hue gradient
        grad = QLinearGradient()
        grad.setStart(0, hrect.top())
        grad.setFinalStop(0, hrect.bottom())

        for i in range(10):
            perc = i / 10.0
            grad.setColorAt(perc, QColor.fromHsv(perc * 360, 255, 255))

        grad.setColorAt(1.0, QColor.fromHsv(359, 255, 255))

        painter.setBrush(grad)
        painter.drawRect(hrect)

        # create the hue line
        y = (hrect.y() + 2) + self.huePercent() * (hrect.height() - 3)
        pen = painter.pen()
        pen.setColor(Qt.white)
        pen.setWidth(2)
        painter.setPen(pen)
        painter.drawLine(hrect.left() + 2, y, hrect.right(), y)
        painter.setPen(Qt.black)

        # create the alpha rect
        if (self.showAlpha()):
            arect = self.alphaRect()

            # create the alpha gradient
            grad = QLinearGradient()
            grad.setStart(arect.left(), 0)
            grad.setFinalStop(arect.right(), 0)
            grad.setColorAt(0.0, QColor(Qt.black))
            grad.setColorAt(1.0, QColor(Qt.white))
            painter.setBrush(grad)
            painter.drawRect(arect)

            # create the alpha line
            x = (arect.x() +
                 2) + (1 - self.alphaPercent()) * (arect.width() - 3)
            pen = painter.pen()
            pen.setColor(Qt.yellow)
            pen.setWidth(2)
            painter.setPen(pen)
            painter.drawLine(x, arect.top() + 2, x, arect.bottom())
            painter.setPen(Qt.black)

        crect = self.colorRect()

        # create the color scale gradient
        grad = QLinearGradient()
        grad.setStart(crect.left(), 0)
        grad.setFinalStop(crect.right(), 0)
        grad.setColorAt(0.0, QColor(255, 255, 255, self.alpha()))
        grad.setColorAt(1.0, QColor.fromHsv(self.hue(), 255, 255,
                                            self.alpha()))
        painter.setBrush(grad)
        painter.drawRect(crect)

        # create the grayscale gradient
        grad = QLinearGradient()
        grad.setStart(0, crect.top())
        grad.setFinalStop(0, crect.bottom())
        grad.setColorAt(0.0, QColor(0, 0, 0, 0))
        grad.setColorAt(1.0, QColor(0, 0, 0, self.alpha()))
        painter.setBrush(grad)
        painter.drawRect(crect)

        # create the color location
        x = crect.x() + (self.saturation() / 255.0) * crect.width()
        y = crect.y() + (1 - (self.lightness() / 255.0)) * crect.height()

        painter.setPen(Qt.white)
        painter.setBrush(
            QColor.fromHsv(self.hue(), self.saturation(), self.lightness(),
                           50))

        painter.setClipRect(crect)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.drawEllipse(QPoint(x, y), 5, 5)

        painter.end()