Проблема смены окон с использованием PyQt5
пишу программу, которая заключается в небольшой тестовой системе. Я создал класс Ui_Menu, который отвечает за приветственную страницу программы:
class Ui_Menu(object):
def setupUi(self, Menu):
Menu.setObjectName("Menu")
Menu.resize(600, 600)
Menu.setMinimumSize(QtCore.QSize(600, 600))
Menu.setMaximumSize(QtCore.QSize(600, 600))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(r"C:\\Users\\xomnr\\OneDrive\\Рабочий стол\\MyPython\\Infa Project\\screenshot-stock.adobe.com-2021.12.27-19_30_16\\"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Menu.setWindowIcon(icon)
self.menu_window = QtWidgets.QWidget(Menu)
self.menu_window.setObjectName("menu_window")
self.background = QtWidgets.QLabel(self.menu_window)
self.background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.background.setText("")
self.background.setTextFormat(QtCore.Qt.AutoText)
self.background.setPixmap(QtGui.QPixmap(r"C:\\Users\\xomnr\\OneDrive\\Рабочий стол\\MyPython\\Infa Project\\scale_1200.png"))
self.background.setAlignment(QtCore.Qt.AlignCenter)
self.background.setWordWrap(False)
self.background.setOpenExternalLinks(False)
self.background.setObjectName("background")
self.dark_background = QtWidgets.QLabel(self.menu_window)
self.dark_background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.dark_background.setStyleSheet("background-color: rgba(0, 0, 0, 100);\n"
"\n"
"")
self.dark_background.setText("")
self.dark_background.setTextFormat(QtCore.Qt.AutoText)
self.dark_background.setAlignment(QtCore.Qt.AlignCenter)
self.dark_background.setWordWrap(False)
self.dark_background.setOpenExternalLinks(False)
self.dark_background.setObjectName("dark_background")
self.titul = QtWidgets.QLabel(self.menu_window)
self.titul.setGeometry(QtCore.QRect(35, 70, 530, 100))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.titul.setFont(font)
self.titul.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border\n"
"border-color: rgb(255, 85, 127);")
self.titul.setObjectName("titul")
self.titul_2 = QtWidgets.QLabel(self.menu_window)
self.titul_2.setGeometry(QtCore.QRect(125, 220, 350, 180))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.titul_2.setFont(font)
self.titul_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border\n"
"border-color: rgb(255, 85, 127);")
self.titul_2.setObjectName("titul_2")
self.pushButton = QtWidgets.QPushButton(self.menu_window)
self.pushButton.setGeometry(QtCore.QRect(200, 500, 200, 70))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(18)
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("QPushButton{\n"
"color: black;\n"
"background-color: white;\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border-color: black;\n"
"}\n"
"\n"
"QPushButton:pressed{\n"
"background-color: rgb(0, 0, 0);\n"
"border: 4 px solid;\n"
"border-radius: 25%;\n"
"border-color: white;\n"
"color: white;\n"
"}\n"
"")
self.pushButton.setObjectName("pushButton")
Menu.setCentralWidget(self.menu_window)
self.retranslateUi(Menu)
QtCore.QMetaObject.connectSlotsByName(Menu)
def retranslateUi(self, Menu):
_translate = QtCore.QCoreApplication.translate
Menu.setWindowTitle(_translate("Menu", "Тест на знание флагов"))
self.titul.setText(_translate("Menu", "<html><head/><body><p align=\"center\">Проект абвгд 10"В" по информатике</p><p align=\"center\">"Тест на знание флагов"</p></body></html>"))
self.titul_2.setText(_translate("Menu", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">Краткая инструкция</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Тест содержит 5 вопросов.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Тест оценивается по 5 бальной шкале.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Выберите вариант ответа и нажмите далее.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Чтобы начать прохождение жмите "Начать"!</span></p></body></html>"))
self.pushButton.setText(_translate("Menu", "Начать!"))
Далее, создавая первый вопрос (новое окно в программе) я не смог осуществить функцию (в коде она имеет название open_question) при использовании которой, нажимая на кнопку Начать(pushButton из класса Ui_Menu) окно приветствия закрывается, а новое появляется.
Заранее спасибо
from sys import argv
from PyQt5 import QtCore, QtGui, QtWidgets
from PIL import Image
class Ui_Menu(object):
def setupUi(self, Menu):
Menu.setObjectName("Menu")
Menu.resize(600, 600)
Menu.setMinimumSize(QtCore.QSize(600, 600))
Menu.setMaximumSize(QtCore.QSize(600, 600))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(r"C:\\Users\\xomnr\\OneDrive\\Рабочий стол\\MyPython\\Infa Project\\screenshot-stock.adobe.com-2021.12.27-19_30_16\\"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Menu.setWindowIcon(icon)
self.menu_window = QtWidgets.QWidget(Menu)
self.menu_window.setObjectName("menu_window")
self.background = QtWidgets.QLabel(self.menu_window)
self.background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.background.setText("")
self.background.setTextFormat(QtCore.Qt.AutoText)
self.background.setPixmap(QtGui.QPixmap(r"C:\\Users\\xomnr\\OneDrive\\Рабочий стол\\MyPython\\Infa Project\\scale_1200.png"))
self.background.setAlignment(QtCore.Qt.AlignCenter)
self.background.setWordWrap(False)
self.background.setOpenExternalLinks(False)
self.background.setObjectName("background")
self.dark_background = QtWidgets.QLabel(self.menu_window)
self.dark_background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.dark_background.setStyleSheet("background-color: rgba(0, 0, 0, 100);\n"
"\n"
"")
self.dark_background.setText("")
self.dark_background.setTextFormat(QtCore.Qt.AutoText)
self.dark_background.setAlignment(QtCore.Qt.AlignCenter)
self.dark_background.setWordWrap(False)
self.dark_background.setOpenExternalLinks(False)
self.dark_background.setObjectName("dark_background")
self.titul = QtWidgets.QLabel(self.menu_window)
self.titul.setGeometry(QtCore.QRect(35, 70, 530, 100))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.titul.setFont(font)
self.titul.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border\n"
"border-color: rgb(255, 85, 127);")
self.titul.setObjectName("titul")
self.titul_2 = QtWidgets.QLabel(self.menu_window)
self.titul_2.setGeometry(QtCore.QRect(125, 220, 350, 180))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.titul_2.setFont(font)
self.titul_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border\n"
"border-color: rgb(255, 85, 127);")
self.titul_2.setObjectName("titul_2")
self.pushButton = QtWidgets.QPushButton(self.menu_window)
self.pushButton.setGeometry(QtCore.QRect(200, 500, 200, 70))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(18)
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("QPushButton{\n"
"color: black;\n"
"background-color: white;\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border-color: black;\n"
"}\n"
"\n"
"QPushButton:pressed{\n"
"background-color: rgb(0, 0, 0);\n"
"border: 4 px solid;\n"
"border-radius: 25%;\n"
"border-color: white;\n"
"color: white;\n"
"}\n"
"")
self.pushButton.setObjectName("pushButton")
Menu.setCentralWidget(self.menu_window)
self.retranslateUi(Menu)
QtCore.QMetaObject.connectSlotsByName(Menu)
def retranslateUi(self, Menu):
_translate = QtCore.QCoreApplication.translate
Menu.setWindowTitle(_translate("Menu", "Тест на знание флагов"))
self.titul.setText(_translate("Menu", "<html><head/><body><p align=\"center\">Проект абвгд 10"В" по информатике</p><p align=\"center\">"Тест на знание флагов"</p></body></html>"))
self.titul_2.setText(_translate("Menu", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">Краткая инструкция</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Тест содержит 5 вопросов.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Тест оценивается по 5 бальной шкале.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Выберите вариант ответа и нажмите далее.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Чтобы начать прохождение жмите "Начать"!</span></p></body></html>"))
self.pushButton.setText(_translate("Menu", "Начать!"))
self.pushButton.clicked.connect(self.open_question)
def open_question(self):
app = QtWidgets.QWidget(self.menu_window)
app.close()
MainWindow = QtWidgets.QMainWindow()
next = First_Question()
next.setupUi(MainWindow)
# self.menu_window.close()
MainWindow.show()
class First_Question(object):
def setupUi(self, Window):
Window.setObjectName("First_Question")
Window.resize(300, 300)
Window.setMinimumSize(QtCore.QSize(300, 300))
Window.setMaximumSize(QtCore.QSize(300, 300))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(r"C:\\Users\\xomnr\\OneDrive\\Рабочий стол\\MyPython\\Infa Project\\screenshot-stock.adobe.com-2021.12.27-19_30_16\\"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Window.setWindowIcon(icon)
self.question_1_window = QtWidgets.QWidget(Window)
self.question_1_window.setObjectName("first_question_window")
self.background = QtWidgets.QLabel(self.question_1_window)
self.background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.background.setText("")
self.background.setTextFormat(QtCore.Qt.AutoText)
self.background.setPixmap(QtGui.QPixmap(r"C:\\Users\\xomnr\\OneDrive\\Рабочий стол\\MyPython\\Infa Project\\scale_1200.png"))
self.background.setAlignment(QtCore.Qt.AlignCenter)
self.background.setWordWrap(False)
self.background.setOpenExternalLinks(False)
self.background.setObjectName("background")
self.dark_background = QtWidgets.QLabel(self.question_1_window)
self.dark_background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.dark_background.setStyleSheet("background-color: rgba(0, 0, 0, 100);\n"
"\n"
"")
self.dark_background.setText("")
self.dark_background.setTextFormat(QtCore.Qt.AutoText)
self.dark_background.setAlignment(QtCore.Qt.AlignCenter)
self.dark_background.setWordWrap(False)
self.dark_background.setOpenExternalLinks(False)
self.dark_background.setObjectName("dark_background")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_Menu()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Никогда не изменяйте код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
main.py
from sys import argv
from PyQt5 import QtCore, QtGui, QtWidgets
# ???from PIL import Image
class Ui_Menu(object):
def setupUi(self, Menu):
Menu.setObjectName("Menu")
Menu.resize(600, 600)
Menu.setMinimumSize(QtCore.QSize(600, 600))
Menu.setMaximumSize(QtCore.QSize(600, 600))
icon = QtGui.QIcon()
# ! vvvvvv
icon.addPixmap(QtGui.QPixmap("Ok.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Menu.setWindowIcon(icon)
self.menu_window = QtWidgets.QWidget(Menu)
self.menu_window.setObjectName("menu_window")
self.background = QtWidgets.QLabel(self.menu_window)
self.background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.background.setText("")
self.background.setTextFormat(QtCore.Qt.AutoText)
# ! vvvvvv
self.background.setPixmap(QtGui.QPixmap("im.png"))
self.background.setAlignment(QtCore.Qt.AlignCenter)
self.background.setWordWrap(False)
self.background.setOpenExternalLinks(False)
self.background.setObjectName("background")
self.dark_background = QtWidgets.QLabel(self.menu_window)
self.dark_background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.dark_background.setStyleSheet("background-color: rgba(0, 0, 0, 100);\n"
"\n"
"")
self.dark_background.setText("")
self.dark_background.setTextFormat(QtCore.Qt.AutoText)
self.dark_background.setAlignment(QtCore.Qt.AlignCenter)
self.dark_background.setWordWrap(False)
self.dark_background.setOpenExternalLinks(False)
self.dark_background.setObjectName("dark_background")
self.titul = QtWidgets.QLabel(self.menu_window)
self.titul.setGeometry(QtCore.QRect(35, 70, 530, 100))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.titul.setFont(font)
self.titul.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border\n"
"border-color: rgb(255, 85, 127);")
self.titul.setObjectName("titul")
self.titul_2 = QtWidgets.QLabel(self.menu_window)
self.titul_2.setGeometry(QtCore.QRect(125, 220, 350, 180))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.titul_2.setFont(font)
self.titul_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border\n"
"border-color: rgb(255, 85, 127);")
self.titul_2.setObjectName("titul_2")
self.pushButton = QtWidgets.QPushButton(self.menu_window)
self.pushButton.setGeometry(QtCore.QRect(200, 500, 200, 70))
font = QtGui.QFont()
font.setFamily("Neo Sans Pro Ultra")
font.setPointSize(18)
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("QPushButton{\n"
"color: black;\n"
"background-color: white;\n"
"border: 4px solid;\n"
"border-radius: 25%;\n"
"border-color: black;\n"
"}\n"
"\n"
"QPushButton:pressed{\n"
"background-color: rgb(0, 0, 0);\n"
"border: 4 px solid;\n"
"border-radius: 25%;\n"
"border-color: white;\n"
"color: white;\n"
"}\n"
"")
self.pushButton.setObjectName("pushButton")
Menu.setCentralWidget(self.menu_window)
self.retranslateUi(Menu)
QtCore.QMetaObject.connectSlotsByName(Menu)
def retranslateUi(self, Menu):
_translate = QtCore.QCoreApplication.translate
Menu.setWindowTitle(_translate("Menu", "Тест на знание флагов"))
self.titul.setText(_translate("Menu", "<html><head/><body><p align=\"center\">Проект абвгд 10"В" по информатике</p><p align=\"center\">"Тест на знание флагов"</p></body></html>"))
self.titul_2.setText(_translate("Menu", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">Краткая инструкция</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Тест содержит 5 вопросов.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Тест оценивается по 5 бальной шкале.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Выберите вариант ответа и нажмите далее.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:400;\">Чтобы начать прохождение жмите "Начать"!</span></p></body></html>"))
self.pushButton.setText(_translate("Menu", "Начать!"))
class First_Question(object):
def setupUi(self, Window):
Window.setObjectName("First_Question")
Window.resize(300, 300)
Window.setMinimumSize(QtCore.QSize(300, 300))
Window.setMaximumSize(QtCore.QSize(300, 300))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("Ok.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Window.setWindowIcon(icon)
self.question_1_window = QtWidgets.QWidget(Window)
self.question_1_window.setObjectName("first_question_window")
self.background = QtWidgets.QLabel(self.question_1_window)
# self.background.setGeometry(QtCore.QRect(0, 0, 600, 600))
self.background.setGeometry(QtCore.QRect(0, 0, 300, 300))
self.background.setText("")
self.background.setTextFormat(QtCore.Qt.AutoText)
# ! vvvvvvvv vvvvvvvvvvvvvvvvv
self.background.setPixmap(QtGui.QPixmap("lena.jpg").scaled(300, 300))
self.background.setAlignment(QtCore.Qt.AlignCenter)
self.background.setWordWrap(False)
self.background.setOpenExternalLinks(False)
self.background.setObjectName("background")
self.dark_background = QtWidgets.QLabel(self.question_1_window)
self.dark_background.setGeometry(QtCore.QRect(0, 0, 300, 300))
self.dark_background.setStyleSheet("background-color: rgba(0, 0, 0, 100);\n"
"\n"
"")
self.dark_background.setText("")
self.dark_background.setTextFormat(QtCore.Qt.AutoText)
self.dark_background.setAlignment(QtCore.Qt.AlignCenter)
self.dark_background.setWordWrap(False)
self.dark_background.setOpenExternalLinks(False)
self.dark_background.setObjectName("dark_background")
# !!!
Window.setCentralWidget(self.question_1_window) # +++
class FirstQuestion(QtWidgets.QMainWindow, First_Question):
def __init__(self):
super(FirstQuestion, self).__init__()
self.setupUi(self)
class MainWindow(QtWidgets.QMainWindow, Ui_Menu):
def __init__(self):
super(MainWindow,self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.open_question)
self.firstQuestion = FirstQuestion()
def open_question(self):
self.firstQuestion.show()
self.hide()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

