PyQt4 に問題があります。ウィンドウ内に新しいウィジェットを作成したいのですが、このウィジェットにカスタム カラーを設定したいと考えています。
QWidget クラスのサブクラスを作成してインスタンス化すると、setStyleSheet() 関数で背景色を変更できません。
新しい QWidget オブジェクトをインスタンス化するとき、背景色を変更しても問題ありません。しかし、普通の QWidget オブジェクトは必要ありません。QWidget の独自のサブクラスを作成したいと考えています。
QPushButton のサブクラスを作成すると、setStyleSheet() 関数を使用して背景色を変更することもできます。
コンソール ウィンドウにエラー メッセージや警告は表示されません。理由を示すことなく、正常に動作しないだけです。
だから私が知りたいのは、QWidgetオブジェクトまたはQPushButtonのサブクラスを作成するだけでウィジェットの背景色を変更できるのに、QWidgetのサブクラスを作成するときは変更できない理由です。QWidget のサブクラスであるオブジェクトの背景色を変更するにはどうすればよいですか?
私が使用しているpythonまたはPyQtのバージョンに固有のものでしょうか?ライブラリのバグですか?または、コードを書いている方法に欠陥がありますか?
私はpython 2.6.4とPyQt4を使用しています
以下は、私をトラブルに導くコードの例です。ウィンドウ内には 3 つのウィジェットが上下に並んでいます。親ウィジェットの背景色は緑に設定されています。一番上のウィジェットは赤に設定されており、真ん中のウィジェットは QWidget のサブクラスであり、青である必要がありますが、何らかの理由で親ウィンドウの色になっているため、表示されません。一番下のウィジェットは QPushButton のサブクラスで、白です。
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_()