Here is the basic functional code (to have a QComboBox with integrated buy bar):

class TaskWidget(QtWidgets.QComboBox):
    """combo box with simple bar animation to indicate that the items are not ready yet"""

    def __init__(self, parent=None):
        super(TaskWidget, self).__init__(parent)
        self.counter = 0
        self.position = 0
        self.indicator_width = 20
        self.finished = False
        self.start_anim()

    def start_anim(self):
        self.timer_id = self.startTimer(50)

    def stop_anim(self):
        self.finished = not self.finished
        self.killTimer(self.timer_id)

    def timerEvent(self, event):
        if not self.finished:
            self.counter += .2
            self.position = ((math.sin(self.counter) + 1) * .5) * (self.width() - self.indicator_width)
            self.update()

    def paintEvent(self, event):
        super(TaskWidget, self).paintEvent(event)
        painter = QtGui.QPainter()
        painter.begin(self)
        indicator = QtCore.QRect(self.position,0,self.indicator_width, event.rect().height())
        painter.fillRect(indicator, QtCore.Qt.gray)
        painter.end()


On 23/12/18 10:03 PM, Frank Rueter | OHUfx wrote:
Hi,

I am trying to draw a simple busy indicator into a QCombobox while it's being populated with items. I thought I'd use with a custom paint event that checks is a certain condition is true, and if so it will draw custom stuff in to the menu, otherwise it just does it's default thing and draw the items as usual.
This is the bit I started with:

class TaskWidget(QtWidgets.QComboBox):
    def __init__(self, parent=None):
        super(TaskWidget, self).__init__(parent)

    def paintEvent(self, event):
        super(TaskWidget, self).paintEvent(event)
        painter = QtGui.QPainter()
        painter.begin(self)
        indicator = QtCore.QRect(0,0,5, event.rect().height())
        painter.fillRect(indicator, QtCore.Qt.red)
        painter.end()

which yields this:

How do I get the (rounded) rectangle of the menu itself though? I.e. I only want to draw the red bar inside the menu area that will show the items.

I guess I should try to query the item view's rect via it's item delegate or something, but I can't get it right.
Any help would be appreciated.

Happy Christmas!

Cheers,
frank


_______________________________________________
PySide mailing list
[email protected]
https://lists.qt-project.org/listinfo/pyside

_______________________________________________
PySide mailing list
[email protected]
https://lists.qt-project.org/listinfo/pyside

Reply via email to