QWidget does not draw background color

自古美人都是妖i 提交于 2019-11-26 11:31:07

问题


I am using PySide 1.2.1 with Python 2.7 and I need a widget to draw a colored background. In Qt Designer I created a simple window consisting of a label, a widget containing three other items and another label. For the widget containing the button, radio button and checkbox I set the styleSheet property to background-color: #FFFFFF. In Qt Designer everything renders as desired:

\"Window

But in Pyside the widget does not draw the background color - but the items on it inherit the color correctly:

\"Window

Here\'s the 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>

Here\'s my Python code doing nothing special:

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)

I already tried self.widget.setAutoFillBackground(True), but according to the documentation this property is disabled anyway as soon as there\'s a valid styleSheet value for the background.

This does not work as well:

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

(Got these hints from How to set QWidget background color?)

How can I get the widget to draw the white background color?


回答1:


Set the WA_StyledBackground attribute on the container widget:

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

(PS: for performance reasons, this attribute isn't set by default for some widget classes - but the documentation doesn't seem to specifiy which ones).



来源:https://stackoverflow.com/questions/23104051/qwidget-does-not-draw-background-color

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!