2014-04-16 19 views
7

Ich verwende PySide 1.2.1 mit Python 2.7 und ich brauche ein Widget, um einen farbigen Hintergrund zu zeichnen. In Qt Designer habe ich ein einfaches Fenster erstellt, das aus einem Label, einem Widget mit drei anderen Elementen und einem anderen Label besteht. Für das Widget, das die Schaltfläche, das Optionsfeld und das Kontrollkästchen enthält, setze ich die Eigenschaft styleSheet auf background-color: #FFFFFF. In Qt Designer alles macht, wie gewünscht:PySide: QWidget zeichnet keine Hintergrundfarbe

Window in Qt Designer

Aber in pyside das Widget nicht die Hintergrundfarbe zeichnen - aber die Gegenstände darauf die Farbe erben richtig:

Window in PySide

Hier die ui-XML:

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>MainWindow</class> 
<widget class="QMainWindow" name="MainWindow"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>276</width> 
    <height>133</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>MainWindow</string> 
    </property> 
    <widget class="QWidget" name="centralwidget"> 
    <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,1"> 
    <item> 
    <widget class="QLabel" name="label"> 
     <property name="text"> 
     <string>The following should have white background:</string> 
     </property> 
    </widget> 
    </item> 
    <item> 
    <widget class="QWidget" name="widget" native="true"> 
     <property name="styleSheet"> 
     <string notr="true">background-color: #FFFFFF</string> 
     </property> 
     <layout class="QHBoxLayout" name="horizontalLayout"> 
     <item> 
     <widget class="QPushButton" name="pushButton"> 
     <property name="text"> 
      <string>PushButton</string> 
     </property> 
     </widget> 
     </item> 
     <item> 
     <widget class="QRadioButton" name="radioButton"> 
     <property name="text"> 
      <string>RadioButton</string> 
     </property> 
     </widget> 
     </item> 
     <item> 
     <widget class="QCheckBox" name="checkBox"> 
     <property name="text"> 
      <string>CheckBox</string> 
     </property> 
     </widget> 
     </item> 
     </layout> 
    </widget> 
    </item> 
    <item> 
    <widget class="QLabel" name="label_2"> 
     <property name="text"> 
     <string>But it hasn't :-(</string> 
     </property> 
    </widget> 
    </item> 
    </layout> 
    </widget> 
    <widget class="QMenuBar" name="menubar"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>276</width> 
    <height>18</height> 
    </rect> 
    </property> 
    </widget> 
    <widget class="QStatusBar" name="statusbar"/> 
</widget> 
<resources/> 
<connections/> 
</ui> 

Hier ist mein Python-Code doi ng nichts Besonderes:

import sys 

from PySide import QtCore, QtGui 

from generated.test import Ui_MainWindow 

class MainWindow(Ui_MainWindow,QtCore.QObject): 

    def __init__(self, *args, **kwargs): 
     Ui_MainWindow.__init__(self, *args, **kwargs) 
     QtCore.QObject.__init__(self) 

    def setupUi(self, MainWindow): 
     Ui_MainWindow.setupUi(self, MainWindow) 

def main(argv): 
    app = QtGui.QApplication(argv) 
    mainwindow = QtGui.QMainWindow() 

    ui = MainWindow() 
    ui.setupUi(mainwindow) 

    mainwindow.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main(sys.argv) 

Ich habe bereits versucht self.widget.setAutoFillBackground(True), aber nach the documentation diese Eigenschaft wird ohnehin so schnell deaktiviert, da es für den Hintergrund ein gültiger Wert ist stylesheet.

funktioniert das nicht so gut:

p = self.widget.palette() 
p.setColor(self.widget.backgroundRole(), QtCore.Qt.white) 
self.widget.setPalette(p) 

(Got diese Hinweise von How to set QWidget background color?)

Wie kann ich das Widget bekommen die weiße Hintergrundfarbe zu zeichnen?

Antwort

8

Stellen Sie die WA_StyledBackground Attribut auf dem Behälter widget:

ui = MainWindow() 
ui.setupUi(mainwindow) 
ui.widget.setAttribute(QtCore.Qt.WA_StyledBackground, True) 
+0

Vielen Dank! Das funktioniert. – Robert

+0

Etwas, das ich nicht verstehe, ist, dass das Attribut 'WA_StyledBackground' nicht gesetzt ist (Methode' testAttribute() ') sowohl für' QWidget() 'als auch' QLabel', aber die erste muss für das Zeichnen von formatiertem Hintergrund und die zweite nicht gesetzt werden ? (Habe es gerade getestet.) – Trilarion