def _snapAlertPixmaps(self, index, level): """ Snap the alert pixmaps for the specified tab. Parameters ---------- index : int The index of the tab of interest. level : unicode The alert level for which to snap the pixmaps. """ # Force an internal update of the stylesheet rules self.setProperty(u'alert', level) repolish(self) # Setup the style option for the control opt = QStyleOptionTabV3() self.initStyleOption(opt, index) opt.rect.moveTo(0, 0) # Snap the normal pixmap opt.state &= ~QStyle.State_Selected normal = QPixmap(opt.rect.size()) normal.fill(Qt.transparent) painter = QStylePainter(normal, self) painter.initFrom(self) painter.drawControl(QStyle.CE_TabBarTab, opt) # Snap the selected pixmap opt.state |= QStyle.State_Selected selected = QPixmap(opt.rect.size()) selected.fill(Qt.transparent) painter = QStylePainter(selected, self) painter.initFrom(self) painter.drawControl(QStyle.CE_TabBarTab, opt) # Reset the internal stylesheet style self.setProperty(u'alert', None) repolish(self) # Update the internal tab data data = self._tab_data[index] data.normal = normal data.selected = selected data.alerted = True # Flip the alert flag so the pixmaps are painted self._has_alerts = True
def paintEvent(self, event): """ Handle the paint event for the button. """ painter = QStylePainter(self) opt = QStyleOptionButton() self.initStyleOption(opt) opt.state &= ~QStyle.State_HasFocus # don't draw the focus rect p = self.position() if p == QDockBar.East: size = opt.rect.size() size.transpose() opt.rect.setSize(size) painter.rotate(90) painter.translate(0, -size.height()) elif p == QDockBar.West: size = opt.rect.size() size.transpose() opt.rect.setSize(size) painter.rotate(-90) painter.translate(-size.width(), 0) painter.drawControl(QStyle.CE_PushButton, opt)