La couleur d'arrière-plan de la sous-classe QWidget ne peut pas être définie

La couleur d'arrière-plan de la sous-classe QWidget ne peut pas être définie

Comme le dit le titre. Résolu. La solution se trouve au bas de l'article.

La couleur d'arrière-plan du widget créé à partir de la sous-classe QWidget n'a pas pu être définie. Cependant, quand j'ai essayé la même chose avec la source d'héritage QWidget (), cela a fonctionné pour une raison quelconque.

Qu'est-ce que c'est!

Je l'ai recherché, je vais donc le résumer.

Code de reproduction

# coding: utf-8

from PySide2 import QtWidgets, QtGui, QtCore


class Widget(QtWidgets.QWidget):
    def __init__(self):
        super(Widget, self).__init__()
        self.setStyleSheet("background-color:red")

        layout = QtWidgets.QVBoxLayout()

        button_widget = QtWidgets.QPushButton()
        button_widget.setText("Inherited widget")

        layout.addWidget(button_widget)

        self.setLayout(layout)


def generate_widget():
    parent_widget = QtWidgets.QWidget()
    parent_widget.setStyleSheet("background-color:red;")

    layout = QtWidgets.QVBoxLayout()

    button_widget = QtWidgets.QPushButton()
    button_widget.setText("QWidget")

    layout.addWidget(button_widget)

    parent_widget.setLayout(layout)

    return parent_widget


class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        hbox = QtWidgets.QHBoxLayout()

        widget = Widget()
        widget2 = generate_widget()

        hbox.addWidget(widget)
        hbox.addWidget(widget2)

        self.setLayout(hbox)


def main():
    app = QtWidgets.QApplication()

    window = Window()
    window.show()

    exit(app.exec_())


if __name__ == "__main__":
    main()

qWidget_bgcolor_test_01.png

Comme ça, la couleur d'arrière-plan ne fonctionne que sur l'arrière-plan du bouton.

Nande?

La Référence des feuilles de style Qt dit: (Super traduction)

QWidget

Seuls l'arrière-plan, le clip d'arrière-plan et l'origine de l'arrière-plan sont pris en charge.

** Lors du sous-classement depuis QWidget, vous devez fournir paintEvent comme ci-dessous. ** **

def paintEvent(self, event): opt = QtWidgets.QStyleOption() opt.init(self) painter = QtGui.QPainter(self) style = self.style() style.drawPrimitive(QtWidgets.QStyle.PE_Widget, opt, painter, self)


 Donc, si vous mettez le code ci-dessus dans une sous-classe, il sera résolu.
 Tu l'as fait!

 ![qWidget_bgcolor_test_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294868/05de106f-8322-b4d3-c8aa-c4794ce7a75c.png)


Recommended Posts

La couleur d'arrière-plan de la sous-classe QWidget ne peut pas être définie
django ne peut pas être installé dans l'environnement de développement de pipenv + pyenv
Changer l'arrière-plan d'Ubuntu (GNOME)
L'extraction de couleur avec Python + OpenCV a résolu le mystère du fond vert
L'histoire de l'utilisation de mysqlclient car PyMySQL ne peut pas être utilisé avec Django 2.2
Définissez la couleur des xticklabels individuellement avec matplotlib
Définissez le nom du processus du programme Python
Réglez la couleur du côté de l'affiche pour que la couleur du sous-titre Youtube change automatiquement.
Résumé des exemples qui ne peuvent pas être pyTorch à l'envers
Changer la couleur des erreurs et avertissements Fabric
[Django] css dans le projet ne peut pas être lu
Cours ROS 119 Corriger la couleur de l'image de la caméra
Le problème que la commande ifconfig ne peut pas être utilisée
Je ne peux pas ouvrir Chrome avec du sélénium car la version du pilote Chrome ne correspond pas
[Python] Changer la couleur du texte et la couleur d'arrière-plan d'un mot clé spécifique dans la sortie d'impression