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
Ale w Pyside widżet nie wyciąga kolor tła - ale elementy na nim dziedziczyć kolor poprawnie:
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?
Dziękuję bardzo! To działa. – Robert
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