Pyqt6 / Python: не работают стили при добавлении виджетов

Не понимаю почему не работают стили? Объясните более подробно, пожалуйста, я только начал изучать библиотеку PyQt6.

У меня есть данный код, я хочу чтобы к SubWidget() применялись стили, но когда использую setstylesheet на прямую, он не работает.
В добавок в SubWidget()не подсвечиваются .addWidget and removeWidget, хотя они работают в коде.
Что я делаю не так?

from PyQt6.QtCore import QSize.
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QLabel, QVBoxLayout, QHBoxLayout
import sys

class SubWidget(QWidget):
    def __init__(self, label_text, button_text, parent_layout) -> None:
        super().__init__()

        self.setObjectName("subWidget")
        
        self.layout = QHBoxLayout()
        self.parent_layout = parent_layout
        
        self.label = QLabel(label_text)
        self.button_delete = QPushButton(button_text)
        self.button_delete.clicked.connect(self.delete_widget)
        
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.button_delete)
        self.setLayout(self.layout)

    def delete_widget(self):
        self.setParent(None)
        self.parent_layout.removeWidget(self)
        self.deleteLater()

class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()

        self.setObjectName("mainWindow")
        self.setWindowTitle("Widget")
        self.setFixedSize(QSize(350, 500))
        
        central_widget = QWidget(self)
        self.setCentralWidget(central_widget)

        self.main_layout = QVBoxLayout(central_widget)

        self.widget_layout = QVBoxLayout()
        self.main_layout.addLayout(self.widget_layout)

        create_label_btn = QPushButton("Create")
        self.main_layout.addWidget(create_label_btn)

        def create_label() -> None:
            new_widget = SubWidget("New Label", "Delete", self.widget_layout)
            self.widget_layout.addWidget(new_widget)

        create_label_btn.clicked.connect(create_label)

StyleSheet = """
    #mainWindow {
        background-color: darkblue;
        border-radius: 10px;
    }
    #subWidget {
        border: 2px solid black;
        margin: 5px;
        padding: 5px;
        background-color: lightgray;
    }
    QPushButton {
        background-color: gray;
        border: none;
        padding: 5px;
    }
"""

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyleSheet(StyleSheet)
    window = MainWindow()
    window.show()
    app.exec()

Ответы (1 шт):

Автор решения: S. Nick

Я немного переписал ваш код и отметил для вас все изменения, которые внес. Расцветку виджетов поменяете как вам нравится, я сделал такую чтобы вам было все видать.
Поменяйте импорты на PyQt6 и попробуйте.

import sys
'''
from PyQt6.QtCore import QSize
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, \
    QPushButton, QLabel, QVBoxLayout, QHBoxLayout
'''
from PyQt5.Qt import *


# +++ --------> vvvvvv <--------------------------------------------------
class SubWidget(QFrame):                                         # QWidget
    def __init__(self, label_text, button_text, parent) -> None:
        super().__init__()
# ?        self.parent_layout = parent_layout
        self.parent = parent                                     # ?
        self.setObjectName("subWidget")
    
        self.label = QLabel(label_text)
        self.label.setAlignment(Qt.AlignCenter)                   # +++
        self.button_delete = QPushButton(button_text)
        self.button_delete.clicked.connect(self.delete_widget)

        self.layout = QHBoxLayout(self)        
        self.layout.addWidget(self.label, stretch=1)             #+ stretch=1
        self.layout.addWidget(self.button_delete, stretch=0)     #+ stretch=0

    def delete_widget(self):
# ?        self.setParent(None)
# ?        self.parent_layout.removeWidget(self)
        self.deleteLater()


class MainWindow(QMainWindow):
    def __init__(self) -> None:
        super().__init__()
        self.setObjectName("mainWindow")
        self.setWindowTitle("MainWindow")
        self.number = 1                                             # +++
# ?        self.setFixedSize(QSize(350, 500))
        
        central_widget = QWidget(self)
        central_widget.setObjectName("centralwidget")
        self.setCentralWidget(central_widget)

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        self.scroll_area = QScrollArea()
        self.scroll_area.setObjectName("scrollarea")
        self.scroll_area.setWidgetResizable(True)
        self.scroll_widget = QWidget()
        self.scroll_widget.setAutoFillBackground(True)
        self.scroll_widget.setStyleSheet("border-radius: 10px;")
        self.widget_layout = QVBoxLayout(self.scroll_widget)
        self.widget_layout.setContentsMargins(0, 0, 0, 0)
        self.scroll_area.setWidget(self.scroll_widget)

        create_label_btn = QPushButton("Create")
        create_label_btn.clicked.connect(self.create_label)

        self.main_layout = QVBoxLayout(central_widget)   
#        self.main_layout.addLayout(self.widget_layout)
        self.main_layout.addWidget(self.scroll_area)                # +++
        self.main_layout.addWidget(
            create_label_btn, alignment=Qt.AlignCenter | Qt.AlignBottom)
        
    def create_label(self) -> None:
        new_widget = SubWidget(f"New Label {self.number}", 
                               "Delete", 
                               self       # self.widget_layout
                               )
        self.widget_layout.addWidget(new_widget)
        self.number += 1


StyleSheet = """
    #mainWindow {                    /* ?????????????????? */
        background-color: #ff0;      /* darkblue */
        border-radius: 10px; 
    }
    
    #centralwidget {                     /* +++++++++ */
        background-color: #5d7;          /* darkblue  */
        border-radius: 20px;             /* 10        */
    }
    
    #scrollarea {                     /* +++++++++ */
        background-color: #5f7;          /* darkblue  */
        border-radius: 10px;             /* 10        */
    }
    
    #subWidget {
        border: 2px solid #fff;             /* black */
        border-radius: 10px;
        background-color: #abc;             /* lightgray */
    }

    QLabel {                                /* +++++++++ */
        background-color: green;    
        color: #fff;
        border-radius: 10px;
    }
 
    QPushButton {
        background-color: gray;  
        border: none;
        padding: 5px;
        border-radius: 10px;               /* +++++++++ */
    }
"""

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyleSheet(StyleSheet)
    app.setFont(QFont("Times", 12, QFont.Bold))                    # +
    window = MainWindow()
    window.resize(QSize(350, 500))                                 # +
    window.show()
    app.exec()

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка