[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyKDE] PyQt4: setPaletteBackgroundColor
From:       Patrick Stinson <patrickkidd () gmail ! com>
Date:       2006-02-09 18:02:56
Message-ID: 94ef510602091002p68f70f16h60e456c930ab0cd3 () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


I new it! that worked for me

On 2/8/06, V. Armando Sole <sole@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@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@mats.imk.fraunhofer.de
> http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
>



--
Patrick Kidd Stinson
http://pkaudio.sourceforge.net/
http://pksampler.sourceforge.net/

[Attachment #5 (text/html)]

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



_______________________________________________
PyKDE mailing list    PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic