Переключение между интерфейсами

Появилась необходимость "изменять" содержимое моего GUI окна на PtQt5.

from PyQt5 import QtCore, QtGui, QtWidgets
import sys, res, datetime, time

weekend = ["Empty", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"]
month = ["Empty", "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]

class mainWindow(object):
    def Ui_Form(self, Form):
        self.show_current_time()
        Form.setObjectName("Form")
        Form.resize(960, 616)
        Form.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        Form.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
        self.widget.setObjectName("widget")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
        self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
        self.label.setText("")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setGeometry(QtCore.QRect(120, 115, 670, 61))
        font = QtGui.QFont()
        font.setPointSize(48)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setGeometry(QtCore.QRect(120, 173, 671, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setGeometry(QtCore.QRect(148, 277, 50, 50))
        self.pushButton.setStyleSheet("border-image: url(:/images/protokolico.png);\n"
"border-radius: 10px;")
        self.pushButton.setText("")
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.protokol)
        self.label_4 = QtWidgets.QLabel(self.widget)
        self.label_4.setGeometry(QtCore.QRect(138, 326, 61, 31))
        font = QtGui.QFont()
        font.setBold(False)
        font.setItalic(False)
        font.setUnderline(False)
        font.setWeight(50)
        font.setStrikeOut(False)
        font.setKerning(False)
        font.setStyleStrategy(QtGui.QFont.PreferDefault)
        self.label_4.setFont(font)
        self.label_4.setMouseTracking(False)
        self.label_4.setTabletTracking(False)
        self.label_4.setAcceptDrops(False)
        self.label_4.setAutoFillBackground(False)
        self.label_4.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_4.setScaledContents(False)
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setWordWrap(True)
        self.label_4.setObjectName("label_4")
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
        self.pushButton_2.setStyleSheet("border-image: url(:/images/zero.png);")
        self.pushButton_2.setText("")
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.setMainWindow)
        self.pushButton_3 = QtWidgets.QPushButton(self.widget)
        self.pushButton_3.setGeometry(QtCore.QRect(224, 277, 50, 50))
        self.pushButton_3.setStyleSheet("border-image: url(:/images/database.png);")
        self.pushButton_3.setText("")
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.DataBase)
        self.label_5 = QtWidgets.QLabel(self.widget)
        self.label_5.setGeometry(QtCore.QRect(219, 326, 61, 31))
        font = QtGui.QFont()
        font.setBold(False)
        font.setItalic(False)
        font.setUnderline(False)
        font.setWeight(50)
        font.setStrikeOut(False)
        font.setKerning(False)
        font.setStyleStrategy(QtGui.QFont.PreferDefault)
        self.label_5.setFont(font)
        self.label_5.setMouseTracking(False)
        self.label_5.setTabletTracking(False)
        self.label_5.setAcceptDrops(False)
        self.label_5.setAutoFillBackground(False)
        self.label_5.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_5.setScaledContents(False)
        self.label_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_5.setWordWrap(True)
        self.label_5.setObjectName("label_5")
        self.pushButton_4 = QtWidgets.QPushButton(self.widget)
        self.pushButton_4.setGeometry(QtCore.QRect(306, 277, 50, 50))
        self.pushButton_4.setStyleSheet("border-image: url(:/images/koap.png);\n"
"border-radius: 10px;")
        self.pushButton_4.setText("")
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_4.clicked.connect(self.Koap)
        self.label_6 = QtWidgets.QLabel(self.widget)
        self.label_6.setGeometry(QtCore.QRect(300, 324, 61, 31))
        font = QtGui.QFont()
        font.setBold(False)
        font.setItalic(False)
        font.setUnderline(False)
        font.setWeight(50)
        font.setStrikeOut(False)
        font.setKerning(False)
        font.setStyleStrategy(QtGui.QFont.PreferDefault)
        self.label_6.setFont(font)
        self.label_6.setMouseTracking(False)
        self.label_6.setTabletTracking(False)
        self.label_6.setAcceptDrops(False)
        self.label_6.setAutoFillBackground(False)
        self.label_6.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_6.setScaledContents(False)
        self.label_6.setAlignment(QtCore.Qt.AlignCenter)
        self.label_6.setWordWrap(True)
        self.label_6.setObjectName("label_6")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_2.setText(_translate("Form", ""))
        self.label_3.setText(_translate("Form", ""))
        self.label_4.setText(_translate("Form", "Составить протокол"))
        self.label_5.setText(_translate("Form", "База данных"))
        self.label_6.setText(_translate("Form", "КоАП"))

    def protokol(self):
            print("Составить протокол")
    
    def setMainWindow(self):
            print("MainWindow")
    
    def DataBase(self):
            print("База данных")
    
    def Koap(self):
            print("КоАП РФ")
            
    def show_current_time(self):
        current_datetime = datetime.datetime.now()
        daynow = weekend[datetime.datetime.today().isoweekday()]
        monthnow = month[current_datetime.month]
        self.timer = QtCore.QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(lambda: self.label_2.setText(QtCore.QTime.currentTime().toString("hh:mm")))
        self.timer.timeout.connect(lambda: self.label_3.setText(f"{daynow}, {current_datetime.day} {monthnow}"))
        self.timer.start()

if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        Form = QtWidgets.QWidget()
        ui = mainWindow()
        ui.Ui_Form(Form)
        Form.show()
        sys.exit(app.exec_())

Нужно, чтобы при нажатии на кнопку с функцией protokol открывался новый интерфейс с кодом:

class Protokol(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(960, 616)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
        self.widget.setObjectName("widget")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
        self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
        self.label.setText("")
        self.label.setObjectName("label")
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
        self.pushButton_2.setStyleSheet("border-image: url(:/images/zero.png);")
        self.pushButton_2.setText("")
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_2.clicked.connect(self.setMainWindow)
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setGeometry(QtCore.QRect(116, 80, 681, 402))
        self.label_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-radius: 7px;")
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setGeometry(QtCore.QRect(120, 100, 671, 131))
        font = QtGui.QFont()
        font.setPointSize(35)
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")

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

    def setMainWindow(self):
            print("MainWindow")

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_3.setText(_translate("Form", "Составить протокол"))

А так же, при нажатии на кнопку с функцией mainWindow интерфейс переходил на первую главную страницу.


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

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

НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

import sys
# ??? import res
import datetime
# ??? import time
from PyQt5 import QtCore, QtGui, QtWidgets


weekend = [
    "Empty", "понедельник", "вторник", "среда", 
    "четверг", "пятница", "суббота", "воскресенье"
]
month = [
    "Empty", "января", "февраля", "марта", "апреля", 
    "мая", "июня", "июля", "августа", "сентября", 
    "октября", "ноября", "декабря"
]


class Ui_Form(object):
    def setupUi(self, Form):
#        self.show_current_time()
        Form.setObjectName("Form")
        Form.resize(960, 616)
        Form.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        Form.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
        self.widget.setObjectName("widget")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
        self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
        self.label.setText("")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setGeometry(QtCore.QRect(120, 115, 670, 61))
        font = QtGui.QFont()
        font.setPointSize(48)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setGeometry(QtCore.QRect(120, 173, 671, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setGeometry(QtCore.QRect(148, 277, 50, 50))
        self.pushButton.setStyleSheet("border-image: url(Ok.png);\n"
"border-radius: 10px;")
        self.pushButton.setText("")
        self.pushButton.setObjectName("pushButton")
#        self.pushButton.clicked.connect(self.protokol)
        self.label_4 = QtWidgets.QLabel(self.widget)
        self.label_4.setGeometry(QtCore.QRect(138, 326, 61, 31))
        font = QtGui.QFont()
        font.setBold(False)
        font.setItalic(False)
        font.setUnderline(False)
        font.setWeight(50)
        font.setStrikeOut(False)
        font.setKerning(False)
        font.setStyleStrategy(QtGui.QFont.PreferDefault)
        self.label_4.setFont(font)
        self.label_4.setMouseTracking(False)
        self.label_4.setTabletTracking(False)
        self.label_4.setAcceptDrops(False)
        self.label_4.setAutoFillBackground(False)
        self.label_4.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_4.setScaledContents(False)
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setWordWrap(True)
        self.label_4.setObjectName("label_4")
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
        self.pushButton_2.setStyleSheet("border-image: url(:/images/zero.png);")
        self.pushButton_2.setText("")
        self.pushButton_2.setObjectName("pushButton_2")
#        self.pushButton_2.clicked.connect(self.setMainWindow)
        self.pushButton_3 = QtWidgets.QPushButton(self.widget)
        self.pushButton_3.setGeometry(QtCore.QRect(224, 277, 50, 50))
        self.pushButton_3.setStyleSheet("border-image: url(:/images/database.png);")
        self.pushButton_3.setText("")
        self.pushButton_3.setObjectName("pushButton_3")
#        self.pushButton_3.clicked.connect(self.DataBase)
        self.label_5 = QtWidgets.QLabel(self.widget)
        self.label_5.setGeometry(QtCore.QRect(219, 326, 61, 31))
        font = QtGui.QFont()
        font.setBold(False)
        font.setItalic(False)
        font.setUnderline(False)
        font.setWeight(50)
        font.setStrikeOut(False)
        font.setKerning(False)
        font.setStyleStrategy(QtGui.QFont.PreferDefault)
        self.label_5.setFont(font)
        self.label_5.setMouseTracking(False)
        self.label_5.setTabletTracking(False)
        self.label_5.setAcceptDrops(False)
        self.label_5.setAutoFillBackground(False)
        self.label_5.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_5.setScaledContents(False)
        self.label_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_5.setWordWrap(True)
        self.label_5.setObjectName("label_5")
        self.pushButton_4 = QtWidgets.QPushButton(self.widget)
        self.pushButton_4.setGeometry(QtCore.QRect(306, 277, 50, 50))
        self.pushButton_4.setStyleSheet("border-image: url(im.png);\n"
"border-radius: 10px;")
        self.pushButton_4.setText("")
        self.pushButton_4.setObjectName("pushButton_4")
#        self.pushButton_4.clicked.connect(self.Koap)
        self.label_6 = QtWidgets.QLabel(self.widget)
        self.label_6.setGeometry(QtCore.QRect(300, 324, 61, 31))
        font = QtGui.QFont()
        font.setBold(False)
        font.setItalic(False)
        font.setUnderline(False)
        font.setWeight(50)
        font.setStrikeOut(False)
        font.setKerning(False)
        font.setStyleStrategy(QtGui.QFont.PreferDefault)
        self.label_6.setFont(font)
        self.label_6.setMouseTracking(False)
        self.label_6.setTabletTracking(False)
        self.label_6.setAcceptDrops(False)
        self.label_6.setAutoFillBackground(False)
        self.label_6.setStyleSheet("color: rgb(255, 255, 255);")
        self.label_6.setScaledContents(False)
        self.label_6.setAlignment(QtCore.Qt.AlignCenter)
        self.label_6.setWordWrap(True)
        self.label_6.setObjectName("label_6")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_2.setText(_translate("Form", ""))
        self.label_3.setText(_translate("Form", ""))
        self.label_4.setText(_translate("Form", "Составить протокол"))
        self.label_5.setText(_translate("Form", "База данных"))
        self.label_6.setText(_translate("Form", "КоАП"))
        
        
class Ui_Protokol(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(960, 616)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(20, 30, 910, 560))
        self.widget.setObjectName("widget")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setGeometry(QtCore.QRect(10, 10, 890, 540))
        self.label.setStyleSheet("border-image: url(:/images/kpk.png);\n"
"border-radius: 20px;")
        self.label.setText("")
        self.label.setObjectName("label")
        self.pushButton_2 = QtWidgets.QPushButton(self.widget)
        self.pushButton_2.setGeometry(QtCore.QRect(819, 264, 40, 40))
        self.pushButton_2.setStyleSheet("border-image: url(lena.jpg);")
        self.pushButton_2.setText("")
        self.pushButton_2.setObjectName("pushButton_2")
#        self.pushButton_2.clicked.connect(self.setMainWindow)
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setGeometry(QtCore.QRect(116, 80, 681, 402))
        self.label_2.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border-radius: 7px;")
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setGeometry(QtCore.QRect(120, 100, 671, 131))
        font = QtGui.QFont()
        font.setPointSize(35)
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_3.setText(_translate("Form", "Составить протокол"))
        
# !!! +++ 
class Protokol(QtWidgets.QWidget, Ui_Protokol):                           # !!! +++ 
    def __init__(self, parent):                                           # +++ parent
        super().__init__()        
        self.setupUi(self)
        self.parent = parent

        self.pushButton_2.clicked.connect(self.setMainWindow)

    def setMainWindow(self):
        print("MainWindow")        
        self.parent.show()
        self.hide()
        

class MainWindow(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super().__init__()        
        self.setupUi(self)
#        self.show_current_time()
        
        self.pushButton.clicked.connect(self.up_protocol)
        self.pushButton_2.clicked.connect(self.setMainWindow)        
        self.pushButton_3.clicked.connect(self.dataBase)        
        self.pushButton_4.clicked.connect(self.koap)

# !!! +++         
        self.protokol = Protokol(self)                                    # !!! +++ 
# !!! +++         
        self.timer = QtCore.QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.show_current_time)
        self.timer.start()        

    def up_protocol(self):
        print("Составить протокол")
        self.protokol.show()
        self.hide()
    
    def setMainWindow(self):
        print("MainWindow")
    
    def dataBase(self):
        print("База данных")
    
    def koap(self):
        print("КоАП РФ")
            
    def show_current_time(self):
        current_datetime = datetime.datetime.now()
        daynow = weekend[datetime.datetime.today().isoweekday()]
        monthnow = month[current_datetime.month]
        self.label_2.setText(QtCore.QTime.currentTime().toString("hh:mm:ss"))
        self.label_3.setText(f"{daynow}, {current_datetime.day} {monthnow}")


if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())

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

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

→ Ссылка