[PyKDE] PyQt4: setPaletteBackgroundColor

Patrick Stinson patrickkidd at gmail.com
Thu Feb 9 18:02:56 GMT 2006


I new it! that worked for me

On 2/8/06, V. Armando Sole <sole at esrf.fr> wrote:
>
> Hi Gerard,
>
> At 20:08 08/02/2006 +0100, Gerard Vermeulen wrote:
> >Please, read my mail again.  You are trying to do something which you
> >cannot do without a cast in C++, because QWidget::palette() returns
> >'const QPalette&'.  Python does not know about constness, and therefore
> >PyQt hands you a rope to hang yourself.
> >
> >The road to independent palettes reads:
> >
> >     palette = QPalette()
> >     setColorRoles(palette)
> >     self.setPalette(palette)
> >     palette = QPalette()
> >     setOtherColorRoles(palette)
> >     self.parentWidget().setPalette(palette)
>
> As pointed out by "David Boddie" <david at boddie.org.uk> :
>
> [begin quote]
>
> You can make the child widget visible by adding the following
> line:
>
>          self.w.setAutoFillBackground(True)
>
> Contents propagation is enabled by default in Qt 4.1.0. For custom
> widgets where you reimplement QWidget's paintEvent(), you can do
> various things to allow effects like partial transparency for child
> widgets while still adding your own colour scheme. However, a plain
> QWidget has to draw itself, so this seems like the quickest way to
> get what you want.
>
> David
> [end quote]
>
> The missing  call setAutoFillBackground(True) was the critical thing.
>
> The code below works as intended.
>
>
> from PyQt4.QtCore import *
> from PyQt4.QtGui import *
>
> class AllGreen(QWidget):
>      def __init__(self):
>          QWidget.__init__(self)
>          layout = QVBoxLayout(self)
>
>          self.w1 = QWidget(self)
>          self.w1.setFixedSize(100, 100)
>          self.w2 = QWidget(self)
>          self.w2.setFixedSize(100, 100)
>          self.w3 = QWidget(self)
>          self.w3.setFixedSize(100, 100)
>
>          palette = self.palette()
>          role = self.backgroundRole()
>          palette.setColor(role, QColor('green'))
>          self.setPalette(palette)
>
>          palette = self.w1.palette()
>          role = self.w1.backgroundRole()
>          palette.setColor(role, QColor('red'))
>          self.w1.setPalette(palette)
>
>          palette = self.w2.palette()
>          role = self.w2.backgroundRole()
>          palette.setColor(role, QColor('yellow'))
>          self.w2.setPalette(palette)
>
>          palette = self.w3.palette()
>          role = self.w3.backgroundRole()
>          palette.setColor(role, QColor('red'))
>          self.w3.setPalette(palette)
>
>          layout.addWidget(self.w1)
>          layout.addWidget(self.w2)
>          layout.addWidget(self.w3)
>
> def testWidget():
>      import sys
>      a = QApplication(sys.argv)
>      QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
>
>      w = AllGreen()
>      w.w1.setAutoFillBackground(True)
>      w.w2.setAutoFillBackground(True)
>      w.w3.setAutoFillBackground(True)
>      w.show()
>
>      a.exec_()
>
> if __name__ == "__main__":
>      testWidget()
>
>
> Regards,
>
> Armando
>
> _______________________________________________
> PyKDE mailing list    PyKDE at mats.imk.fraunhofer.de
> http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
>



--
Patrick Kidd Stinson
http://pkaudio.sourceforge.net/
http://pksampler.sourceforge.net/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20060209/8b17a294/attachment.html


More information about the PyQt mailing list