Как я могу открыть свой третий экран с помощью PyQt5? - PullRequest
0 голосов
/ 31 марта 2020

Я создаю простое приложение, используя QtDesigner. Моя цель состояла в том, чтобы открыть первый экран, созданный с помощью дизайнера (Ui_psi_screen), затем после нажатия на кнопку закрыть его и сразу же открыть второй экран (Ui_sdq_screen), и, в этом случае проблема, сделать то же самое с кнопкой, которая открывает 3-й экран (Ui_indici_screen), но я не могу подключить этот третий экран так же, как для второго. Это основной python код:

from PyQt5 import QtCore, QtGui, QtWidgets
from UI_sdq import Ui_sdq_screen
from UI_indici import Ui_indici_screen

class Ui_psi_screen(object):
    def openSdq(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_sdq_screen()
        self.ui.setupUi(self.window)
        MainWindow.hide()
        self.window.show()
    def openIndici(self):
        self.window = QtWidgets.QMainWindow()
        self.ui = Ui_indici_screen()
        self.ui.setupUi(self.window)
        MainWindow.hide()
        self.window.show()

    def setupUi(self, psi_screen):
        psi_screen.setObjectName("psi_screen")
        psi_screen.resize(800, 605)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)

        self.avanti_psi = QtWidgets.QPushButton(self.centralwidget)
        self.avanti_psi.setGeometry(QtCore.QRect(470, 530, 81, 23))
        self.avanti_psi.setObjectName("avanti_psi")

        self.avanti_psi.clicked.connect(self.openSdq)


        self.retranslateUi(psi_screen)
        QtCore.QMetaObject.connectSlotsByName(psi_screen)

    def retranslateUi(self, psi_screen):


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_psi_screen()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

это второй экран, созданный с помощью QtDesigner (Ui_sdq_screen):

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'UI_sdq.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets
from UI_indici import Ui_indici_screen
from UI_psi import Ui_psi_screen

class Ui_sdq_screen(object):


    def setupUi(self, sdq_screen):
        ...
        self.Avanti_sdq = QtWidgets.QPushButton(self.centralwidget)
        self.Avanti_sdq.setGeometry(QtCore.QRect(520, 520, 81, 23))
        self.Avanti_sdq.setObjectName("Avanti_sdq")

        self.Avanti_sdq.clicked(Ui_psi_screen.openIndici())
...



    def retranslateUi(self, sdq_screen):
...

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Ui_sdq_screen = QtWidgets.QMainWindow()
    ui = Ui_sdq_screen()
    ui.setupUi(Ui_sdq_screen)
    Ui_sdq_screen.show()
    sys.exit(app.exec_())

И отсутствует экран, который при попытке при подключении таким же образом, как я делал раньше, приложение вылетает:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'UI_indici.ui'
#
# Created by: PyQt5 UI code generator 5.14.1
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_indici_screen(object):
    def setupUi(self, indici_screen):

        ...
 self.risultati_indici.setPalette(palette)
        self.risultati_indici.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.risultati_indici.setObjectName("risultati_indici")
...

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Ui_indici_screen = QtWidgets.QMainWindow()
    ui = Ui_indici_screen()
    ui.setupUi(Ui_indici_screen)
    Ui_indici_screen.show()
    sys.exit(app.exec_())

Я не могу понять, почему приложение блокируется, когда я добавляю функцию к кнопке второго экрана. Кто-нибудь может мне помочь?

...