Ho un problema con PyQt4. Voglio creare un nuovo widget all'interno di una finestra e voglio che questo widget abbia un colore personalizzato.pyQt4: sottoclasse QWidget che non risponde al nuovo colore di sfondo setStyleSheet()
Quando creo una sottoclasse della classe QWidget e la istanziamo, non sono in grado di cambiare il colore di sfondo tramite la funzione setStyleSheet().
Quando istanzio un nuovo oggetto QWidget, non ho problemi a cambiare il colore di sfondo. Ma non voglio un oggetto QWidget ordinario. Voglio creare la mia sottoclasse di QWidget.
Quando creo una sottoclasse di un QPushButton, sono anche in grado di cambiare il colore dello sfondo utilizzando la funzione setStyleSheet().
Non ci sono messaggi di errore o avvisi nella finestra della console, si rifiuta semplicemente di funzionare correttamente senza alcuna indicazione sul perché.
Quindi quello che vorrei sapere è perché è che posso cambiare il colore di un widget sfondo, se ho semplicemente creare un oggetto QWidget, o di una sottoclasse di QPushButton, ma non quando creo una sottoclasse di QWidget . E come posso quindi cambiare il colore di sfondo di un oggetto che è una sottoclasse di QWidget?
E 'forse qualcosa di specifico per la versione di Python o PyQt che sto usando? È un bug nella libreria? o qualche difetto nel modo in cui sto scrivendo il mio codice?
Sto usando Python 2.6.4 e PyQt4
Di seguito è riportato un esempio del codice che mi porta a guai. Ci sono tre widget all'interno della finestra uno sotto l'altro. Il widget principale è impostato con il colore di sfondo verde. Il widget superiore è impostato su rosso, quello centrale, è la sottoclasse di QWidget, che deve essere blu, ma sembra invisibile perché assume il colore della finestra padre per qualche motivo. e il widget in basso è una sottoclasse di QPushButton ed è bianco.
import sys
from PyQt4 import QtGui, QtCore
################################################################################
#--------------------------------------------------------- CUSTOM WIDGET CLASS 1
class CustomWidget(QtGui.QWidget):
def __init__(self, parent):
QtGui.QWidget.__init__(self, parent)
# some custom properties and functions will follow
################################################################################
#--------------------------------------------------------- CUSTOM WIDGET CLASS 2
class CustomWidget2(QtGui.QPushButton):
def __init__(self, parent):
QtGui.QPushButton.__init__(self, parent)
# some custom properties and functions will follow
################################################################################
#----------------------------------------------------------- PARENT WIDGET CLASS
class Parent(QtGui.QWidget):
def __init__(self, parent=None):
#---------------------------------------------------------- SETUP WINDOW
QtGui.QWidget.__init__(self, parent)
self.resize(500, 340)
self.setStyleSheet("QWidget {background-color: #00FF00}")
#-------------------------------------------------- SETUP DEFAULT WIDGET
wid1 = QtGui.QWidget(self)
wid1.setGeometry(10, 10, 480, 100)
wid1.setStyleSheet("QWidget {background-color: #FF0000 }")
#------------------------------------------------- SETUP CUSTOM WIDGET 1
wid2 = CustomWidget(self)
wid2.setGeometry(10, 120, 480, 100)
wid2.setStyleSheet("QWidget {background-color: #0000FF }")
#------------------------------------------------- SETUP CUSTOM WIDGET 2
wid3 = CustomWidget2(self)
wid3.setGeometry(10, 230, 480, 100)
wid3.setStyleSheet("QWidget {background-color: #FFFFFF }")
################################################################################
#-------------------------------------------------------------------------- MAIN
app = QtGui.QApplication(sys.argv)
win = Parent()
win.show()
app.exec_()
L'inizializzazione per opt deve essere "opt.initFrom (self)". – Algorys