2014-04-16 14 views
7

Używam PySide 1.2.1 z Pythonem 2.7 i potrzebuję widżetu do narysowania kolorowego tła. W Qt Designer utworzyłem proste okno składające się z etykiety, widgetu zawierającego trzy inne elementy i inną etykietę. W przypadku widżetu zawierającego przycisk, przycisk radiowy i pole wyboru ustawię właściwość styleSheet na background-color: #FFFFFF. w Qt Designer wszystko czyni to pożądane:PySide: QWidget nie rysuje koloru tła

Window in Qt Designer

Ale w Pyside widżet nie wyciąga kolor tła - ale elementy na nim dziedziczyć kolor poprawnie:

Window in PySide

tutaj 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> 

Oto mój kod do Pythona doi ng nic specjalnego:

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) 

Próbowałem już self.widget.setAutoFillBackground(True), ale według the documentation właściwość ta jest wyłączona w każdym razie jak tylko jest to ważna wartość styleSheet jako tło.

To nie działa tak dobrze:

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

(Got tych wskazówek z How to set QWidget background color?)

Jak mogę uzyskać widżet do rysowania białego koloru tła?

Odpowiedz

8

Ustaw atrybut WA_StyledBackground na widget pojemnika:

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

Dziękuję bardzo! To działa. – Robert

+0

Nie rozumiem, że atrybut 'WA_StyledBackground' nie jest ustawiony (metoda' testAttribute() ') zarówno dla' QWidget() 'i' QLabel', ale pierwszy potrzebuje go do rysowania stylu tła, a drugi nie. ? (Właśnie to wypróbowałem.) – Trilarion