[PYTHON] Die Hintergrundfarbe der QWidget-Unterklasse kann nicht festgelegt werden

Die Hintergrundfarbe der QWidget-Unterklasse kann nicht festgelegt werden

Wie der Titel schon sagt. Gelöst. Die Lösung befindet sich am Ende des Artikels.

Die Hintergrundfarbe des aus der QWidget-Unterklasse erstellten Widgets konnte nicht festgelegt werden. Als ich jedoch dasselbe mit der Vererbungsquelle QWidget () versuchte, funktionierte es aus irgendeinem Grund.

Was ist das!

Ich habe es nachgeschlagen, also werde ich es zusammenfassen.

Reproduktionscode

# 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

Auf diese Weise funktioniert die Hintergrundfarbe nur auf dem Hintergrund der Schaltfläche.

Nande?

In der Qt Style Sheets Reference heißt es: (Super Übersetzung)

QWidget

Es werden nur Hintergrund, Hintergrundclip und Hintergrundursprung unterstützt.

** Wenn Sie eine Unterklasse von QWidget erstellen, müssen Sie paintEvent wie folgt angeben. ** **.

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)


 Wenn Sie also den obigen Code in eine Unterklasse einfügen, wird er gelöst.
 Du hast es geschafft!

 ![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

Die Hintergrundfarbe der QWidget-Unterklasse kann nicht festgelegt werden
django kann nicht in der Entwicklungsumgebung von pipenv + pyenv installiert werden
Ändern Sie den Hintergrund von Ubuntu (GNOME)
Die Farbextraktion mit Python + OpenCV löste das Rätsel des grünen Hintergrunds
Die Geschichte der Verwendung von mysqlclient, da PyMySQL nicht mit Django 2.2 verwendet werden kann
Stellen Sie die Farbe der xticklabels individuell mit matplotlib ein
Legen Sie den Prozessnamen des Python-Programms fest
Stellen Sie die Farbe auf der Posterseite so ein, dass sich die Farbe des Youtube-Untertitels automatisch ändert.
Zusammenfassung von Beispielen, die nicht rückwärts pyTorch sein können
Ändern Sie die Farbe von Fabric-Fehlern und Warnungen
[Django] CSS im Projekt kann nicht gelesen werden
ROS-Kurs 119 Korrigieren Sie die Farbe des Kamerabildes
Das Problem, dass der Befehl ifconfig nicht verwendet werden kann
Ich kann Chrome nicht mit Selen öffnen, da die Chrome-Treiberversion nicht übereinstimmt
[Python] Ändern Sie die Textfarbe und Hintergrundfarbe eines bestimmten Schlüsselworts in der Druckausgabe