Добавить изображение на фон интерфейса

Нужно чтобы после обратного отсчёта добавить фон из картинки:

fon

Код:

from PyQt5.QtCore import Qt, QTimer, QSize
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, \
    QLabel, QVBoxLayout, QHBoxLayout, QRadioButton, QGroupBox, QButtonGroup
from PyQt5.QtGui import QPixmap, QImage, QPalette, QBrush
import webbrowser

class WindowGroup(QWidget):
    def __init__(self):
        super().__init__()
        
        self.label = QLabel('Group')

        self.radioGroupBox = QGroupBox("Варианты ответов") 
        self.radioGroup = QButtonGroup() 

        self.rbtn_1 = QRadioButton('1')
        self.rbtn_2 = QRadioButton('2')
        self.rbtn_3 = QRadioButton('3')
        self.rbtn_4 = QRadioButton('34')

        self.radioGroup.addButton(self.rbtn_1)
        self.radioGroup.addButton(self.rbtn_2)
        self.radioGroup.addButton(self.rbtn_3)
        self.radioGroup.addButton(self.rbtn_4)

        layout_ans1 = QHBoxLayout()  
        layout_ans2 = QVBoxLayout()
        layout_ans3 = QVBoxLayout()
        layout_ans2.addWidget(self.rbtn_1) 
        layout_ans2.addWidget(self.rbtn_2)
        layout_ans3.addWidget(self.rbtn_3) 
        layout_ans3.addWidget(self.rbtn_4)

        layout_ans1.addLayout(layout_ans2)
        layout_ans1.addLayout(layout_ans3) 

        self.radioGroupBox.setLayout(layout_ans1)

        layout = QVBoxLayout(self)
        layout.addWidget(self.label, alignment=Qt.AlignCenter)
        layout.addWidget(self.radioGroupBox)


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.num = 3
        self.question = QLabel('<h1 style="color: rgb(250, 55, 55);">Правила гри')

        self.rules = QLabel('''Гра "Хто хоче стати мільйонером?" 
\
Ви повинні правильно відповісти на низку питань \
з кількома варіантами відповідей, щоб заробити 3.000.000 грн. \
Всього 15 питань, кожне питання коштує певної суми грошей, \
учасники не мають жодних тимчасових обмежень для надання \
відповіді. Учасники також отримують три види підказок, щоб допомогти собі, \
якщо вони застрягли на конкретному питанні.  
\
Більше ознайомитися з правилами можна, натиснувши на кнопку. 
\
Хай щастить!''')
        self.rules.setObjectName('rules')
        self.rules.setWordWrap(True)    

        self.button_rules = QPushButton('Правила')
        self.button_rules.clicked.connect(lambda: webbrowser.open('https://ru.wwbm.com/rules'))
        self.button_rules.setFixedSize(300,50)

        self.button_start = QPushButton('Почати', clicked=self._start)  
        self.button_start.setFixedSize(300,50)
        app.setStyleSheet("QLabel, QPushButton{font-size: 20pt;}#rules { background-color: #ccffbd;}")      
        
        self.layout = QVBoxLayout(self)
        lineH1 = QHBoxLayout()
        lineH2 = QHBoxLayout()
        lineH3 = QHBoxLayout()
        lineH1.addWidget(self.question, alignment=Qt.AlignHCenter)
        lineH2.addWidget(self.rules)
        lineH3.addWidget(self.button_rules, alignment=Qt.AlignCenter)
        lineH3.addWidget(self.button_start, alignment=Qt.AlignCenter)
        self.layout.addLayout(lineH1)
        self.layout.addWidget(self.rules, alignment=Qt.AlignHCenter)
        self.layout.addLayout(lineH3)
        
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_timer)

        self.windowGroup = WindowGroup()
        
    def update_timer(self):        
        self.question.setText(f'<h1 style="color: rgb(250, 55, 55);">{self.num}</h1>')
        if self.num == 0:
            self.timer.stop()
            self.question.setPixmap(QPixmap("million.png"))
            self.num = 3
            self.rules.hide()
            self.button_start.hide()
            self.button_rules.hide()
            self.layout.addWidget(self.windowGroup, alignment=Qt.AlignHCenter)

            return            
        self.num -= 1        

    def _start(self):
        self.timer.start(1000)
        

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet("QLabel{font-size: 20pt;}#rules { background-color: #ccffbd;}")
    w = MainWindow()          
    w.setWindowTitle('Million')  
    w.resize(850, 770)
    w.move(610, 110)
    w.show()                           
    sys.exit(app.exec_())

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

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

Я заменил

class MainWindow(QWidget):

на

class MainWindow(QMainWindow):

Добавил:

    self.centralWidget = QWidget()                              # +++
    self.centralWidget.setObjectName('centralWidget')           # +++
    self.setCentralWidget(self.centralWidget)                   # +++
    
    ...

    self.layout = QVBoxLayout(self.centralWidget)               # +++

    ...

            #centralWidget {          vvvvvvvvvvvv <-- это ваше изображение
                background-image: url(q1366360.png);
            }
    ...

main.py

import webbrowser
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class WindowGroup(QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName('windowgroup')                             # +
        
        self.label = QLabel('Group')

        self.radioGroupBox = QGroupBox("Варианты ответов") 
        self.radioGroup = QButtonGroup() 

        self.rbtn_1 = QRadioButton('1')
        self.rbtn_2 = QRadioButton('2')
        self.rbtn_3 = QRadioButton('3')
        self.rbtn_4 = QRadioButton('34')

        self.radioGroup.addButton(self.rbtn_1)
        self.radioGroup.addButton(self.rbtn_2)
        self.radioGroup.addButton(self.rbtn_3)
        self.radioGroup.addButton(self.rbtn_4)

        layout_ans1 = QHBoxLayout()  
        layout_ans2 = QVBoxLayout()
        layout_ans3 = QVBoxLayout()
        layout_ans2.addWidget(self.rbtn_1) 
        layout_ans2.addWidget(self.rbtn_2)
        layout_ans3.addWidget(self.rbtn_3) 
        layout_ans3.addWidget(self.rbtn_4)

        layout_ans1.addLayout(layout_ans2)
        layout_ans1.addLayout(layout_ans3) 

        self.radioGroupBox.setLayout(layout_ans1)

        layout = QVBoxLayout(self)
        layout.addWidget(self.label, alignment=Qt.AlignCenter)
        layout.addWidget(self.radioGroupBox)


# class MainWindow(QWidget):                                        # -
class MainWindow(QMainWindow):                                      # + QMainWindow
    def __init__(self):
        super().__init__()
        
        self.centralWidget = QWidget()                              # +++
        self.centralWidget.setObjectName('centralWidget')           # +++
        self.setCentralWidget(self.centralWidget)                   # +++

        self.num = 3
        self.question = QLabel('<h1 style="color: rgb(250, 55, 55);">Правила гри')
        self.rules = QLabel('''Гра "Хто хоче стати мільйонером?" 
\
Ви повинні правильно відповісти на низку питань \
з кількома варіантами відповідей, щоб заробити 3.000.000 грн. \
Всього 15 питань, кожне питання коштує певної суми грошей, \
учасники не мають жодних тимчасових обмежень для надання \
відповіді. Учасники також отримують три види підказок, щоб допомогти собі, \
якщо вони застрягли на конкретному питанні.  
\
Більше ознайомитися з правилами можна, натиснувши на кнопку. 
\
Хай щастить!''')
        self.rules.setObjectName('rules')
        self.rules.setWordWrap(True)    

        self.button_rules = QPushButton('Правила')
        self.button_rules.clicked.connect(lambda: webbrowser.open('https://ru.wwbm.com/rules'))
        self.button_rules.setFixedSize(300,50)

        self.button_start = QPushButton('Почати', clicked=self._start)  
        self.button_start.setFixedSize(300,50)
        
# -       app.setStyleSheet("QLabel, QPushButton{font-size: 20pt;}#rules { background-color: #ccffbd;}")      
        
        self.layout = QVBoxLayout(self.centralWidget)        # +++ self.centralWidget
        
        lineH1 = QHBoxLayout()
        lineH2 = QHBoxLayout()
        lineH3 = QHBoxLayout()
        lineH1.addWidget(self.question, alignment=Qt.AlignHCenter)
        lineH2.addWidget(self.rules)
        lineH3.addWidget(self.button_rules, alignment=Qt.AlignCenter)
        lineH3.addWidget(self.button_start, alignment=Qt.AlignCenter)
        self.layout.addLayout(lineH1)
        self.layout.addWidget(self.rules, alignment=Qt.AlignHCenter)
        self.layout.addLayout(lineH3)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_timer)

        self.windowGroup = WindowGroup()
        
    def update_timer(self):        
        self.question.setText(f'<h1 style="color: rgb(250, 55, 55);">{self.num}</h1>')
        if self.num == 0:
            self.timer.stop()
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv            
            self.setStyleSheet("""
                QLabel, QPushButton {
                    font-size: 20pt;
                }
                #rules { 
                    background-color: #ccffbd;
                }
                #windowgroup > QGroupBox { 
                    background-color: #8FD6E1;
                }
                #centralWidget {
                    background-image: url(q1366360.png);
                }
            """) 
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^            
            
            self.question.setPixmap(QPixmap("million.png"))
            self.num = 3
            self.rules.hide()
            self.button_start.hide()
            self.button_rules.hide()
            self.layout.addWidget(self.windowGroup, alignment=Qt.AlignHCenter)
            return            
        self.num -= 1        

    def _start(self):
        self.timer.start(1000)
        

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    app.setStyleSheet("""
        QLabel { 
            font-size: 20pt;
        }
        #rules { 
            background-color: #ccffbd;
        }
        #centralWidget {
            background-image: url(tile.png);
        }

    """)   
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    w = MainWindow()          
    w.setWindowTitle('Million')  
    w.resize(850, 600)
#    w.move(610, 110)
    w.show()                           
    sys.exit(app.exec_())

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

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

→ Ссылка