python - 为什么QWidget在继承时表现不同

标签 python python-3.x pyqt pyqt5 qtstylesheets

当我使用继承的 QWidget 时,边距和间距没有背景颜色,这与直接使用 QWidget 不同(代码基本相同)。

纯 QWidget:

class App(QWidget):

    def __init__(self):
        super().__init__()        
        self.start()       

    def start(self):
        self.layout = QHBoxLayout()

        self.layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(self.layout)   

        self.setGeometry(10, 10, 500, 100) 

        grid_layout = QGridLayout()
        grid_layout.setSpacing(10)

        widget = QWidget()
        widget.setLayout(grid_layout)        
        widget.setStyleSheet('background: green')

        grid_layout.addWidget(QLabel("first"), 0, 0)
        grid_layout.addWidget(QLabel("second"), 0, 1)
        grid_layout.addWidget(QLabel("third"), 0, 2)        

        self.layout.addWidget(widget)
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = App()
    #ex.start_card_holder()
    sys.exit(app.exec_())

enter image description here

继承的QWidget:

class App(QWidget):

    ....

    class MainWidget(QWidget):
        def __init__(self):
            QWidget.__init__(self)            

    def start(self):
        ...

        widget = App.MainWidget()
        ...

enter image description here

谁能告诉我哪里做错了?

最佳答案

必须清楚以下概念才能理解行为:

在您的情况下,如果“小部件”是 QWidget,那么它将被绘制,但如果它是 MainWidget,则不会。

要检查我指出的内容,只需使用上述问题的答案之一启用背景颜色:

# ...
widget = App.MainWidget()
widget.setAttribute(Qt.WA_StyledBackground, True)
# ...

enter image description here

关于python - 为什么QWidget在继承时表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59585334/

相关文章:

python - 将相机捕获的视频流式传输到另一个位置

python-3.x - 如何从csv获取数据到python对象中

python - 为什么我会收到此错误?在 Windows 10 上安装 osmnx 可以做什么?

python - Mac OS X 的系统级快捷方式

python - 如何在 NLTK 中使用 word_tokenize 忽略单词之间的标点符号?

python - 在 Python 中,如何将一组数字随机分布到网格/矩阵上?

python - Django Rest Framework - 通过函数传递模型数据,然后将输出发布到同一模型的单独字段中

python - 如何从命令提示符运行 Pygame 零程序?

python - PyQt:在窗口上显示 QTextEdits

python - PyQt 模型中按多列排序