[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