2014-04-16 4 views
7

PySide 1.2.1을 Python 2.7과 함께 사용하고 있으며 배경색을 그리기 위해 위젯이 필요합니다. Qt Designer에서 레이블, 3 개의 다른 항목과 다른 레이블을 포함하는 위젯으로 구성된 간단한 창을 만들었습니다. 버튼, 라디오 버튼 및 체크 박스가 포함 된 위젯의 경우 styleSheet 속성을 background-color: #FFFFFF으로 설정했습니다. Qt는 디자이너 모두에서 원하는대로 렌더링 : PySide : QWidget이 배경색을 그려 내지 않습니다

Window in Qt Designer

그러나 Pyside에 위젯이 배경 색상을 그릴하지 않습니다

- 만의 항목이 제대로 색상 상속 :

Window in PySide

여기를 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> 

여기 내 Python 코드 doi가 있습니다. 특별한 NG의 아무것도 :

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) 

는 이미 self.widget.setAutoFillBackground(True)을 시도,하지만 배경에 대한 유효한 스타일 값이 거기로 the documentation에 따라이 속성은 어쨌든 즉시 사용할 수 없습니다.

이 잘 작동하지 않습니다

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

가 어떻게 흰색 배경 색상을 그릴 수있는 위젯을 얻을 수 있습니다 (How to set QWidget background color?에서 이러한 힌트를 얻었다)?

답변

8

컨테이너 위젯에 WA_StyledBackground 속성을 설정합니다

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

대단히 감사합니다! 이 작동합니다. – Robert

+0

내가 이해가 안되는 점은'WA_StyledBackground' 애트리뷰트가'QWidget()'과'QLabel' 모두에 대해 ('testAttribute()'메소드가 설정되어 있지 않습니다.하지만 처음에는 드로잉 스타일의 배경으로 설정해야하고, ? (그냥 테스트 해.) – Trilarion