Добавить изображение на фон интерфейса
Нужно чтобы после обратного отсчёта добавить фон из картинки:
Код:
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_())


