Doh! I can't believe I am so dumb sometimes. After nearly two days
banging my head on this I found the QWidget.repaint event.
Oh well, learned a lot of other stuff in the struggle. :)
b
On Sep 27, 2006, at 3:27 PM, Bernhard VonZastrow wrote:
Hello all, I am very new to PyQt so hopefully this isn't a
completely boneheaded question...
I am writing my own disclosureTriangle widget using PyQt4. I
subclassed the QWidget object and implemented my own paintEvent
function. In this function I am drawing the control using an
instance of a QPainter object. (I got the basics for how to do
this from a website who's url I can no longer find).
The code to draw this control is as follows:
#----------------------------------------------
def paintEvent(self, event):
if not self.isVisible():
return
if self.isEnabled():
color = self.normalColor
else:
color = self.disabledColor
if self.mouseDown == True:
color = self.blackColor
rightPolygon = QPolygon(3)
rightPolygon.setPoint(0,1,1)
rightPolygon.setPoint(1, 9, 6)
rightPolygon.setPoint(2, 1, 11)
downPolygon = QPolygon(3)
downPolygon.setPoint(0,1,2)
downPolygon.setPoint(1, 11,)
downPolygon.setPoint(2, 6, 10)
if self.state == "expanded":
self.drawImage(color, downPolygon)
else:
self.drawImage(color, rightPolygon)
#----------------------------------------------
def drawImage(self, color, polygon):
painter = QPainter()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing, True)
painter.setBrush(color)
painter.setPen(color)
painter.drawPolygon(polygon, Qt.OddEvenFill)
painter.end()
This all works as expected. The question is how do I tell the
paintEvent to fire from within my code? I am implementing my own
mousePressEvent code. When the user has pressed the mouse, I want
to darken the image. How do I tell my widget (from within itself)
that it needs to repaint itself?
I've tried the following:
#----------------------------------------------
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.mouseDown = True
print "asdf"
newRect = QRect(0,0,100,100)
newEvent = QPaintEvent(newRect)
self.paintEvent(newEvent)
but I get the following output:
asdf
QPainter::begin: Widget painting can only begin as a result of a
paintEvent
Painter must be active to set rendering hints
QPainter::end: Painter is not active, aborted
Any ideas how to go about implementing this? Any help at all, even
a push in the right direction would be appreciated.
Thanks
Ben
_______________________________________________
PyKDE mailing list [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
_______________________________________________
PyKDE mailing list [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde