自定义小部件在 PyQt5 中保持不可见

Custom Widget stays invisible in PyQt5

我正在尝试使用 PyQt5 创建自定义 QWidget,但似乎缺少一些重要信息。代码本身不会产生任何错误,但每当我尝试将我的自定义小部件之一添加到 MainWindow 的布局时,它就会保持不可见状态。有趣的是,放置在我的自定义小部件中的 QWidget 显示在主窗口中。 我还没有发现其他人遇到完全相同的问题,但我希望有人能向我解释我的代码或对 PyQt5 的理解有什么问题。

import sys
from PyQt5.QtWidgets import *

class CustomWidget(QWidget):

    def __init__(self):

        super().__init__()
        self.layout = QVBoxLayout(self)
        self.setLayout(self.layout)


        self.innerwidget=QWidget()
        self.layout.addWidget(self.innerwidget)
        self.innerwidget.setFixedSize(50,50)

        self.setFixedSize(100,100)
        self.setStyleSheet("background-color:blue;")




class MainWindow(QMainWindow):

    def __init__(self):

        super().__init__()

        self.CentralWidget=QWidget()
        self.setCentralWidget(self.CentralWidget)
        self.CentralWidget.setStyleSheet("background-color:green;")


        self.CentralWidget.resize(1000,600)

        self.Layout=QHBoxLayout()
        self.CentralWidget.setLayout(self.Layout)

#----Script---------

App=QApplication(sys.argv)

TestWindow=MainWindow()

#This one is there, since I can´t reduce the size of the MainWindow further than 100x100,
# but it doesnt get drawn
TestWidget=CustomWidget()
TestWindow.Layout.addWidget(TestWidget)

#This one is shown correctly
TestWidget2=CustomWidget()
TestWidget2.show()

TestWindow.show()

App.exec()

这个答案可能来得有点晚,但最终我找到了解决我的问题的方法。似乎继承 QWidget 的对象中的函数 "setStyleSheet" 存在错误。这会导致对象永远不会改变它的背景颜色,因此保持不可见。 "setStyleSheet" 的以下重载解决了这个问题:

def setStyleSheet(self,p_str):                                    
    super(CustomWidget,self).setStyleSheet(p_str)
    self.show()
    self.setAutoFillBackground(True)