Как сделать переход между страницами в одном окне?
Пытаюсь реализовать игру. Изначально мы попадаем в меню
Дальше идёт развилка. Либо сразу начать игру или же настроить игру.
У меня идёт проблема с реализацией перехода между страницами. Начальную страницу и станицу настроек сделал в Qt Designer.
Я уже пробовал найти что-то в интернете, но безуспешно.
Прошу помощи. Заранее спасибо!
main.py
import sys
import PyQt5
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
import IntroPage
import SettingsPage
class Intro(QtWidgets.QMainWindow):
def __init__(self):
super(Intro,self).__init__()
self.IntroPage = IntroPage.Ui_MainWindow()
self.IntroPage.setupUi(self)
app = QtWidgets.QApplication([])
application = Intro()
application.show()
sys.exit(app.exec())`
IntroPage.py (Код сделан в Qt Designer.)
# -*- coding: utf-8 -*-
import sys
import PyQt5
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
import SettingsPage
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1280, 720)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../../Downloads/Safe.png"), QtGui.QIcon.Normal,
QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 1280, 720))
font = QtGui.QFont()
font.setPointSize(24)
self.label.setFont(font)
self.label.setText("")
self.label.setPixmap(QtGui.QPixmap("../../Downloads/TV - 1.jpg"))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(490, 250, 300, 90))
font = QtGui.QFont()
font.setFamily("Comic Relief")
font.setPointSize(24)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("QPushButton {\n"
" color:#E2E6ED;\n"
" background-color:#353B47;\n"
" border:7px solid #191E1D;\n"
" border-radius:25;\n"
"}\n"
"QPushButton:pressed {\n"
" background-color:#2A2F37;\n"
"}")
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(490, 370, 300, 90))
font = QtGui.QFont()
font.setFamily("Comic Relief")
font.setPointSize(24)
self.pushButton_2.setFont(font)
self.pushButton_2.setStyleSheet("QPushButton {\n"
" color:#E2E6ED;\n"
" background-color:#353B47;\n"
" border:7px solid #191E1D;\n"
" border-radius:25;\n"
"}\n"
"QPushButton:pressed {\n"
" background-color:#2A2F37;\n"
"}")
self.pushButton_2.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "SafeCracker"))
self.pushButton.setText(_translate("MainWindow", "НАЧАТЬ ИГРУ"))
self.pushButton_2.setText(_translate("MainWindow", "НАСТРОЙКИ"))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Каким способом я могу перейти к настройкам?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Класс QStackedWidget предоставляет стек виджетов, в котором одновременно виден только один виджет.
import sys
# ??? import PyQt5
from PyQt5 import QtCore, QtGui, QtWidgets
# ??? from PyQt5.QtGui import QIcon
# ??? import SettingsPage
#from IntroPage import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1280, 720)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../../Downloads/Safe.png"), QtGui.QIcon.Normal,
QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 1280, 720))
font = QtGui.QFont()
font.setPointSize(24)
self.label.setFont(font)
self.label.setText("")
# ---
# self.label.setPixmap(QtGui.QPixmap("lena.jpg").scaled(250, 250))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(490, 250, 300, 90))
font = QtGui.QFont()
font.setFamily("Comic Relief")
font.setPointSize(24)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("QPushButton {\n"
" color:#E2E6ED;\n"
" background-color:#353B47;\n"
" border:7px solid #191E1D;\n"
" border-radius:25;\n"
"}\n"
"QPushButton:pressed {\n"
" background-color:#2A2F37;\n"
"}")
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(490, 370, 300, 90))
font = QtGui.QFont()
font.setFamily("Comic Relief")
font.setPointSize(24)
self.pushButton_2.setFont(font)
self.pushButton_2.setStyleSheet("QPushButton {\n"
" color:#E2E6ED;\n"
" background-color:#353B47;\n"
" border:7px solid #191E1D;\n"
" border-radius:25;\n"
"}\n"
"QPushButton:pressed {\n"
" background-color:#2A2F37;\n"
"}")
self.pushButton_2.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "SafeCracker"))
self.pushButton.setText(_translate("MainWindow", "НАЧАТЬ ИГРУ"))
self.pushButton_2.setText(_translate("MainWindow", "НАСТРОЙКИ"))
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
class Intro(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(Intro,self).__init__()
# self.introPage = Ui_MainWindow()
# self.introPage.setupUi(self)
self.setupUi(self)
layout = QtWidgets.QGridLayout(self.centralwidget)
layout.addWidget(self.label, 0, 0, 4, 1)
layout.addWidget(self.pushButton, 1, 1, 1, 1)
layout.addWidget(self.pushButton_2, 2, 1, 1, 1)
layout.addWidget(QtWidgets.QLabel(), 0, 2, 4, 1)
class Page_2(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__()
self.parent = parent
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.label = QtWidgets.QLabel('Можно НАЧАТЬ ИГРУ',
alignment=QtCore.Qt.AlignCenter)
font = QtGui.QFont("Comic Relief", 25)
self.label.setFont(font)
self.pushButton = QtWidgets.QPushButton('на Page_1', self.centralwidget)
self.pushButton.clicked.connect(self._page_1)
layout = QtWidgets.QVBoxLayout(self.centralwidget)
layout.addWidget(self.label)
layout.addWidget(self.pushButton)
def _page_1(self):
self.parent.stackWidget.setCurrentIndex(0)
class Page_3(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__()
self.parent = parent
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.label = QtWidgets.QLabel('Тут НАСТРОЙКИ',
alignment=QtCore.Qt.AlignCenter)
font = QtGui.QFont("Comic Relief", 25)
self.label.setFont(font)
self.pushButton = QtWidgets.QPushButton('на Page_1', self.centralwidget)
self.pushButton.clicked.connect(self._page_1)
layout = QtWidgets.QVBoxLayout(self.centralwidget)
layout.addWidget(self.label)
layout.addWidget(self.pushButton)
def _page_1(self):
self.parent.stackWidget.setCurrentIndex(0)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.setStyleSheet("""
QMainWindow {
border-image: url(boy.jpg) 0 0 0 0 ; /* <---- */
}
""")
self.stackWidget = QtWidgets.QStackedWidget()
layout = QtWidgets.QHBoxLayout(self.centralwidget)
layout.addWidget(self.stackWidget)
self.page_1 = Intro()
self.page_1.pushButton.clicked.connect(self._page_2)
self.page_1.pushButton_2.clicked.connect(self._page_3)
self.stackWidget.addWidget(self.page_1)
self.page_2 = Page_2(self)
self.stackWidget.addWidget(self.page_2)
self.page_3 = Page_3(self)
self.stackWidget.addWidget(self.page_3)
def _page_2(self):
self.stackWidget.setCurrentIndex(1)
def _page_3(self):
self.stackWidget.setCurrentIndex(2)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
w = MainWindow()
w.resize(800, 400)
w.show()
sys.exit(app.exec())
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
boy.jpg


