[PyQt] Re: Note about setting setting painters with gradients instead of brushes

Phil Thompson phil at riverbankcomputing.co.uk
Mon Sep 3 20:30:45 BST 2007


On Monday 03 September 2007, Jeff Donner wrote:
> > This should work with PyQt v4.2 and later. If that's what you are using
> > then
>
> send me a simple script that demonstrates the problem.
>
> Here - I believe I'm using the latest. I'm not using Ubuntu's old one
> at least. I can't tell how, to see. Anyway, this shows it on my
> system.
>
> #!/usr/bin/env python
>
> import sys
>
> from PyQt4 import QtCore, QtGui
>
> class MainWidget(QtGui.QWidget):
>     def __init__(self, parent = None):
>         QtGui.QWidget.__init__(self, parent)
>         self.w = 10.0 ; self.h = 10.0
>
>     def paintEvent(self, event):
>         xpos = self.w / 2.0 ; ypos = self.h / 2.0
>         radius = 3.0
>         painter = QtGui.QPainter(self)
>
>         # invert it (so it's right-side-up)
>         factor = 1.5
>         painter.setWindow(-((factor - 1.0) * self.w) / 2.0,
>                            ((factor + 1.0) * self.h) / 2.0,
>                            self.w * factor, -self.h * factor)
>
>         painter.setPen(QtCore.Qt.black)
>         # bottom, right, top, left
>         painter.drawLine(0.0, 0.0, self.w, 0.0)
>         painter.drawLine(self.w, 0.0, self.w, self.h)
>         painter.drawLine(self.w, self.h, 0.0, self.h)
>         painter.drawLine(0.0, self.h, 0.0, 0.0)
>
>
>         g = QtGui.QRadialGradient(xpos, ypos, radius)
>
>         opaque      = QtGui.QColor(255, 0, 0, 255)
>         transparent = QtGui.QColor(255, 0, 0,   0)
>
>         g.setColorAt(0.0, opaque)
>         g.setColorAt(1.0, transparent)
>
>         g.setSpread(QtGui.QGradient.PadSpread)
>
>         workaround = False
>
>         if workaround:
>             print "workaround"
>             b = QtGui.QBrush(g)
>             painter.setBrush(b)
>         else:
>             print "no workaround"
>             painter.setBrush(g)
>
>         r = QtCore.QRectF(xpos - radius, ypos - radius, radius * 2, radius
> * 2) painter.setPen(QtCore.Qt.NoPen)
>         painter.drawRect(r)
>
>
>
> app = QtGui.QApplication(sys.argv)
>
> widget = MainWidget()
> widget.resize(800, 600)
> widget.show()
> sys.exit(app.exec_())

Works fine for me.

Phil


More information about the PyQt mailing list