2012-09-29 14 views
10

La riga w.setBackgroundRole(QPalette.Base) nel codice seguente non ha alcun effetto. Perché? Come lo aggiusto?Come impostare il colore di sfondo 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_() 

risposta

35

È necessario chiamare setAutoFillBackground(True) sul widget. Per impostazione predefinita, un QWidget non riempie lo sfondo.

Per ulteriori informazioni, consultare la documentazione relativa alla proprietà setAutoFillBackground.

Se si desidera utilizzare un colore di sfondo arbitraria, è necessario modificare palette del widget, invece:

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

Benvenuti a StackOverflow! Grazie per aver risposto sia al "perché" che al "come"! – user763305

+4

Nessun problema. Dovrei aggiungere che la documentazione Qt è un po 'poco chiara: il ruolo 'QPalette :: Window' è usato per riempire lo sfondo di un widget se è una finestra di livello superiore. In caso contrario, viene utilizzato il 'backgroundRole' del widget, quindi il codice dovrebbe funzionare come previsto. – jmk

Problemi correlati