2014-04-16 15 views
7

Tôi đang sử dụng PySide 1.2.1 với Python 2.7 và tôi cần một tiện ích để vẽ nền màu. Trong thiết kế Qt, tôi đã tạo một cửa sổ đơn giản bao gồm một nhãn, một widget chứa ba mục khác và một nhãn khác. Đối với tiện ích chứa nút, nút radio và hộp kiểm Tôi đặt thuộc tính styleSheet thành background-color: #FFFFFF. Trong Qt Designer mọi thứ ám như mong muốn:PySide: QWidget không vẽ màu nền

Window in Qt Designer

Nhưng trong Pyside widget không vẽ màu nền - nhưng các mục trên nó thừa hưởng màu sắc một cách chính xác:

Window in PySide

Dưới đây là 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> 

Đây là mã Python của tôi doi ng có gì đặc biệt:

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) 

Tôi đã cố gắng self.widget.setAutoFillBackground(True), nhưng theo the documentation khách sạn này bị vô hiệu hóa nào càng sớm càng có một giá trị kiểu giá trị trong nền.

này không làm việc cũng như:

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

(Got những gợi ý từ How to set QWidget background color?)

Làm thế nào tôi có thể nhận được các widget để vẽ màu nền trắng?

Trả lời

8

Đặt thuộc tính WA_StyledBackground trên widget container:

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

Cảm ơn bạn rất nhiều! Những công việc này. – Robert

+0

Điều tôi không hiểu là thuộc tính 'WA_StyledBackground' không được đặt (phương thức' testAttribute() ') cho cả' QWidget() 'và' QLabel' nhưng yêu cầu đầu tiên được đặt để vẽ nền theo kiểu và thứ hai không ? (Chỉ cần thử nghiệm nó.) – Trilarion

Các vấn đề liên quan