2012-09-29 10 views
10

La línea w.setBackgroundRole(QPalette.Base) en el siguiente código no tiene ningún efecto. ¿Por qué? ¿Cómo arreglo eso?Cómo configurar el color de fondo de QWidget?

import sys 
from PySide.QtCore import * 
from PySide.QtGui import * 

app = QApplication(sys.argv) 
w = QWidget() 
w.setBackgroundRole(QPalette.Base) 
w.show() 
app.exec_() 

Respuesta

35

Debe llamar al setAutoFillBackground(True) en el widget. Por defecto, un QWidget no llena su fondo.

Para obtener más información, consulte la documentación de la propiedad setAutoFillBackground.

Si desea utilizar un color de fondo arbitrario, tiene que modificar la paleta del widget en su lugar:

p = w.palette() 
p.setColor(w.backgroundRole(), Qt.red) 
w.setPalette(p) 
+2

Bienvenido a Stackoverflow! ¡Gracias por responder tanto al "por qué" como al "cómo"! – user763305

+4

No hay problema. Debo añadir que la documentación de Qt no está nada clara: el rol de 'QPalette :: Window' se utiliza para llenar el fondo de un widget si se trata de una ventana de nivel superior. De lo contrario, se usa el 'backgroundRole' de su widget en su lugar, por lo que su código debería funcionar como se esperaba. – jmk

Cuestiones relacionadas