Смена виджета в главном окне PyQt

Есть две программы. Нужно объединить их в одну с возможностью переключения между собой посредством радиокнопок таким образом, чтобы менялся только определенный Widget.

На данном скриншоте в Widget показана первая программа (DES)

Код сгенерированный Qt Designer:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(654, 215)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.forshifr = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.forshifr.setGeometry(QtCore.QRect(280, 40, 201, 21))
        self.forshifr.setObjectName("forshifr")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 30, 271, 41))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 70, 261, 21))
        self.label_2.setObjectName("label_2")
        self.key = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.key.setGeometry(QtCore.QRect(280, 70, 201, 21))
        self.key.setObjectName("key")
        self.btn_donshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_donshifr.setGeometry(QtCore.QRect(490, 40, 71, 21))
        self.btn_donshifr.setObjectName("btn_donshifr")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 100, 271, 16))
        self.label_3.setObjectName("label_3")
        self.fornoshifr = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.fornoshifr.setGeometry(QtCore.QRect(280, 100, 201, 21))
        self.fornoshifr.setObjectName("fornoshifr")
        self.btn_donnoshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_donnoshifr.setGeometry(QtCore.QRect(490, 100, 71, 23))
        self.btn_donnoshifr.setObjectName("btn_donnoshifr")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 130, 131, 16))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 150, 131, 16))
        self.label_5.setObjectName("label_5")
        self.label_no = QtWidgets.QLabel(self.centralwidget)
        self.label_no.setGeometry(QtCore.QRect(190, 130, 221, 20))
        self.label_no.setText("")
        self.label_no.setObjectName("label_no")
        self.label_yes = QtWidgets.QLabel(self.centralwidget)
        self.label_yes.setGeometry(QtCore.QRect(190, 150, 221, 20))
        self.label_yes.setText("")
        self.label_yes.setObjectName("label_yes")
        self.btn_unshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_unshifr.setGeometry(QtCore.QRect(570, 40, 75, 21))
        self.btn_unshifr.setObjectName("btn_unshifr")
        self.btn_donkey = QtWidgets.QPushButton(self.centralwidget)
        self.btn_donkey.setGeometry(QtCore.QRect(490, 70, 71, 23))
        self.btn_donkey.setObjectName("btn_donkey")
        self.btn_unkey = QtWidgets.QPushButton(self.centralwidget)
        self.btn_unkey.setGeometry(QtCore.QRect(570, 70, 75, 23))
        self.btn_unkey.setObjectName("btn_unkey")
        self.btn_unnoshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_unnoshifr.setGeometry(QtCore.QRect(570, 100, 75, 23))
        self.btn_unnoshifr.setObjectName("btn_unnoshifr")
        self.btnoutput1 = QtWidgets.QPushButton(self.centralwidget)
        self.btnoutput1.setGeometry(QtCore.QRect(140, 130, 31, 16))
        self.btnoutput1.setObjectName("btnoutput1")
        self.btnoutput2 = QtWidgets.QPushButton(self.centralwidget)
        self.btnoutput2.setGeometry(QtCore.QRect(140, 150, 31, 16))
        self.btnoutput2.setObjectName("btnoutput2")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(20, 0, 611, 41))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.DES = QtWidgets.QRadioButton(self.horizontalLayoutWidget)
        self.DES.setObjectName("DES")
        self.horizontalLayout.addWidget(self.DES)
        self.RSA = QtWidgets.QRadioButton(self.horizontalLayoutWidget)
        self.RSA.setObjectName("RSA")
        self.horizontalLayout.addWidget(self.RSA)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 654, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Введите сообщение, которое нужно зашифровать:"))
        self.label_2.setText(_translate("MainWindow", "Введите ключ для шифрования и расшифрования:"))
        self.btn_donshifr.setText(_translate("MainWindow", "ЗАГРУЗИТЬ"))
        self.label_3.setText(_translate("MainWindow", "Введите сообщение, которое нужно расшифровать:"))
        self.btn_donnoshifr.setText(_translate("MainWindow", "ЗАГРУЗИТЬ"))
        self.label_4.setText(_translate("MainWindow", "Зашифрованный текст:"))
        self.label_5.setText(_translate("MainWindow", "Расшифрованный текст:"))
        self.btn_unshifr.setText(_translate("MainWindow", "ВЫГРУЗИТЬ"))
        self.btn_donkey.setText(_translate("MainWindow", "ЗАГРУЗИТЬ"))
        self.btn_unkey.setText(_translate("MainWindow", "ВЫГРУЗИТЬ"))
        self.btn_unnoshifr.setText(_translate("MainWindow", "ВЫГРУЗИТЬ"))
        self.btnoutput1.setText(_translate("MainWindow", "->"))
        self.btnoutput2.setText(_translate("MainWindow", "->"))
        self.DES.setText(_translate("MainWindow", "DES"))
        self.RSA.setText(_translate("MainWindow", "RSA"))


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

Код первого приложения (DES):

from PyQt5 import uic
from PyQt5.QtWidgets import QApplication
from DES1 import MyDES
import copy


Form, Window = uic.loadUiType("DES11.ui")

app = QApplication([])
window = Window()
form = Form()
form.setupUi(window)
window.show()


def on_deshifr():  # Шифрованный текст в файл

    fornoshifr = form.forshifr.toPlainText()  # Взятие текста из поля

    file = open('noshifr.txt', 'r')
    lines = file.readlines()
    if len(lines) == 0:
        lines.append(fornoshifr)
    else:
        lines[0] = fornoshifr



    save_changes = open('noshifr.txt', 'w')
    save_changes.writelines(lines)
    save_changes.close()


def on_shifr(): # Исходный текст в файл
    forshifr = form.forshifr.toPlainText() # Взятие текста из поля

    file = open('noshifr.txt', 'r')
    lines = file.readlines()
    if len(lines) == 0:
        lines.append(forshifr)
    else:
        lines[0] = forshifr



    save_changes = open('noshifr.txt', 'w')
    save_changes.writelines(lines)
    save_changes.close()

def on_unshifr(): # Исходный текст из файла
    file = open('noshifr.txt', 'r')
    NOshifr = file.readlines()
    if len(NOshifr) == 0:
        form.forshifr.setPlainText('')
    else:
        form.forshifr.setPlainText(NOshifr[0])
    file.close()



def on_unnoshifr(): # Шифрованный текст из файла
    file = open('shifr.txt', 'r')
    Shifr = file.readlines()
    if len(Shifr) == 0:
        form.fornoshifr.setPlainText('')
    else:
        form.fornoshifr.setPlainText(Shifr[0])
    file.close()


def on_donkey(): # Ключ в файл
    Key = form.key.toPlainText()  # Взятие текста из поля

    file = open('key.txt', 'r')

    lines = file.readlines()

    if len(lines)==0:
        lines.append(Key)

    else:
        lines[0] = Key


    save_changes = open('key.txt', 'w')
    save_changes.writelines(lines)
    save_changes.close()

def on_unkey(): # Ключ из файла
    file = open('key.txt', 'r')
    KKey = file.readlines()
    if len(KKey) == 0:
        form.key.setPlainText('')
    else:
        form.key.setPlainText(KKey[0])
    file.close()


def on_output1(): # Вывод шифрованного сообщения
    key = form.key.toPlainText()  # Взятие ключа из поля
    md = MyDES()  # Создание объекта класса
    forshifr = form.forshifr.toPlainText()  # Взятие текста из поля
    shifr = md.encode(forshifr, key)  # Шифрованное сообщение

    file = open('shifr.txt', 'r')

    lines = file.readlines()
    if len(lines) == 0:
        lines.append(shifr)
    else:
        lines[0] = shifr


    save_changes = open('shifr.txt', 'w')
    save_changes.writelines(lines)
    save_changes.close()
    form.label_no.setText(shifr)  # Вывод на экран шифрованное сообщение


def on_output2(): # Вывод дешифрованного сообщения
    key = form.key.toPlainText()
    md = MyDES()
    fornoshifr = form.fornoshifr.toPlainText()
    noshifr = md.decode(fornoshifr, key)

    file = open('noshifr.txt', 'r')



    lines = file.readlines()
    if len(lines) == 0:
        lines.append(noshifr)
    else:
        lines[0] = noshifr
    file.close()

    save_changes = open('noshifr.txt', 'w')
    save_changes.writelines(lines)
    save_changes.close()
    form.label_yes.setText(noshifr)


form.btn_donshifr.clicked.connect(on_shifr) # ЗАГРУЗИТЬ В ФАЙЛ нешифрованное
form.btn_donnoshifr.clicked.connect(on_deshifr) # ЗАГРУЗИТЬ В ФАЙЛ шифрованное

form.btn_unshifr.clicked.connect(on_unshifr) # ВЫГРУЗИТЬ ИЗ ФАЙЛА нешифрованное
form.btn_unnoshifr.clicked.connect(on_unnoshifr) # ВЫГРУЗИТЬ ИЗ ФАЙЛА шифрованное

form.btn_donkey.clicked.connect(on_donkey) # ЗАГРУЗИТЬ В ФАЙЛ ключ
form.btn_unkey.clicked.connect(on_unkey) # ВЫГРУЗИТЬ В ФАЙЛ ключ

form.btnoutput1.clicked.connect(on_output1) # ВЫВОД нешифрованное
form.btnoutput2.clicked.connect(on_output2) # ВЫВОД шифрованное


app.exec_()

Второе приложение (RSA) по функционалу аналогично первому (DES)


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

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

Я не проверял логику вашего приложения, а просто покажу как реализовать вашу задумку с использованием виджета QStackedWidget.

Класс QStackedWidget предоставляет стек виджетов, в котором одновременно виден только один виджет. Больше https://doc.qt.io/qt-5/qstackedwidget.html

Обратите внимание, что я убрал виджеты QRadioButton из файла созданного в Qt Designer и перенес их в основное окно.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(654, 215)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.forshifr = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.forshifr.setGeometry(QtCore.QRect(280, 40, 201, 21))
        self.forshifr.setObjectName("forshifr")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 30, 271, 41))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 70, 261, 21))
        self.label_2.setObjectName("label_2")
        self.key = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.key.setGeometry(QtCore.QRect(280, 70, 201, 21))
        self.key.setObjectName("key")
        self.btn_donshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_donshifr.setGeometry(QtCore.QRect(490, 40, 71, 21))
        self.btn_donshifr.setObjectName("btn_donshifr")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 100, 271, 16))
        self.label_3.setObjectName("label_3")
        self.fornoshifr = QtWidgets.QPlainTextEdit(self.centralwidget)
        self.fornoshifr.setGeometry(QtCore.QRect(280, 100, 201, 21))
        self.fornoshifr.setObjectName("fornoshifr")
        self.btn_donnoshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_donnoshifr.setGeometry(QtCore.QRect(490, 100, 71, 23))
        self.btn_donnoshifr.setObjectName("btn_donnoshifr")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 130, 131, 16))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 150, 131, 16))
        self.label_5.setObjectName("label_5")
        self.label_no = QtWidgets.QLabel(self.centralwidget)
        self.label_no.setGeometry(QtCore.QRect(190, 130, 221, 20))
        self.label_no.setText("")
        self.label_no.setObjectName("label_no")
        self.label_yes = QtWidgets.QLabel(self.centralwidget)
        self.label_yes.setGeometry(QtCore.QRect(190, 150, 221, 20))
        self.label_yes.setText("")
        self.label_yes.setObjectName("label_yes")
        self.btn_unshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_unshifr.setGeometry(QtCore.QRect(570, 40, 75, 21))
        self.btn_unshifr.setObjectName("btn_unshifr")
        self.btn_donkey = QtWidgets.QPushButton(self.centralwidget)
        self.btn_donkey.setGeometry(QtCore.QRect(490, 70, 71, 23))
        self.btn_donkey.setObjectName("btn_donkey")
        self.btn_unkey = QtWidgets.QPushButton(self.centralwidget)
        self.btn_unkey.setGeometry(QtCore.QRect(570, 70, 75, 23))
        self.btn_unkey.setObjectName("btn_unkey")
        self.btn_unnoshifr = QtWidgets.QPushButton(self.centralwidget)
        self.btn_unnoshifr.setGeometry(QtCore.QRect(570, 100, 75, 23))
        self.btn_unnoshifr.setObjectName("btn_unnoshifr")
        self.btnoutput1 = QtWidgets.QPushButton(self.centralwidget)
        self.btnoutput1.setGeometry(QtCore.QRect(140, 130, 31, 16))
        self.btnoutput1.setObjectName("btnoutput1")
        self.btnoutput2 = QtWidgets.QPushButton(self.centralwidget)
        self.btnoutput2.setGeometry(QtCore.QRect(140, 150, 31, 16))
        self.btnoutput2.setObjectName("btnoutput2")
        
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 654, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Введите сообщение, которое нужно зашифровать:"))
        self.label_2.setText(_translate("MainWindow", "Введите ключ для шифрования и расшифрования:"))
        self.btn_donshifr.setText(_translate("MainWindow", "ЗАГРУЗИТЬ"))
        self.label_3.setText(_translate("MainWindow", "Введите сообщение, которое нужно расшифровать:"))
        self.btn_donnoshifr.setText(_translate("MainWindow", "ЗАГРУЗИТЬ"))
        self.label_4.setText(_translate("MainWindow", "Зашифрованный текст:"))
        self.label_5.setText(_translate("MainWindow", "Расшифрованный текст:"))
        self.btn_unshifr.setText(_translate("MainWindow", "ВЫГРУЗИТЬ"))
        self.btn_donkey.setText(_translate("MainWindow", "ЗАГРУЗИТЬ"))
        self.btn_unkey.setText(_translate("MainWindow", "ВЫГРУЗИТЬ"))
        self.btn_unnoshifr.setText(_translate("MainWindow", "ВЫГРУЗИТЬ"))
        self.btnoutput1.setText(_translate("MainWindow", "->"))
        self.btnoutput2.setText(_translate("MainWindow", "->"))


class WindowDES(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
# тут ваша логика для  WindowDES
        self.btn_donshifr.clicked.connect(self.on_shifr)      # ЗАГРУЗИТЬ В ФАЙЛ нешифрованное
        self.btn_donnoshifr.clicked.connect(self.on_deshifr)  # ЗАГРУЗИТЬ В ФАЙЛ шифрованное
        self.btn_unshifr.clicked.connect(self.on_unshifr)     # ВЫГРУЗИТЬ ИЗ ФАЙЛА нешифрованное
        self.btn_unnoshifr.clicked.connect(self.on_unnoshifr) # ВЫГРУЗИТЬ ИЗ ФАЙЛА шифрованное
        self.btn_donkey.clicked.connect(self.on_donkey)       # ЗАГРУЗИТЬ В ФАЙЛ ключ
        self.btn_unkey.clicked.connect(self.on_unkey)         # ВЫГРУЗИТЬ В ФАЙЛ ключ
        self.btnoutput1.clicked.connect(self.on_output1)      # ВЫВОД нешифрованное
        self.btnoutput2.clicked.connect(self.on_output2)      # ВЫВОД шифрованное   
        self.lines = []
     
    def on_deshifr(self):                         # Шифрованный текст в файл
        fornoshifr = self.forshifr.toPlainText()  # Взятие текста из поля
        file = open('noshifr.txt', 'r')
        lines = file.readlines()
        if len(lines) == 0:
            lines.append(fornoshifr)
        else:
            lines[0] = fornoshifr
        save_changes = open('noshifr.txt', 'w')
        save_changes.writelines(lines)
        save_changes.close()

    def on_shifr(self):                        # Исходный текст в файл
        forshifr = self.forshifr.toPlainText() # Взятие текста из поля
        file = open('noshifr.txt', 'r')
        lines = file.readlines()
        if len(lines) == 0:
            lines.append(forshifr)
        else:
            lines[0] = forshifr
        save_changes = open('noshifr.txt', 'w')
        save_changes.writelines(lines)
        save_changes.close()

    def on_unshifr(self):                  # Исходный текст из файла
        file = open('noshifr.txt', 'r')
        NOshifr = file.readlines()
        if len(NOshifr) == 0:
            self.forshifr.setPlainText('')
        else:
            self.forshifr.setPlainText(NOshifr[0])
        file.close()

    def on_unnoshifr(self):                # Шифрованный текст из файла
        file = open('shifr.txt', 'r')
        Shifr = file.readlines()
        if len(Shifr) == 0:
            self.fornoshifr.setPlainText('')
        else:
            self.fornoshifr.setPlainText(Shifr[0])
        file.close()

    def on_donkey(self): # Ключ в файл
        Key = self.key.toPlainText()       # Взятие текста из поля
        file = open('key.txt', 'r')
        lines = file.readlines()
        if len(lines)==0:
            lines.append(Key)
        else:
            lines[0] = Key
        save_changes = open('key.txt', 'w')
        save_changes.writelines(lines)
        save_changes.close()

    def on_unkey(self):                    # Ключ из файла
        file = open('key.txt', 'r')
        KKey = file.readlines()
        if len(KKey) == 0:
            self.key.setPlainText('')
        else:
            self.key.setPlainText(KKey[0])
        file.close()

    def on_output1(self):                 # Вывод шифрованного сообщения
        key = self.key.toPlainText()      # Взятие ключа из поля
        md = MyDES()                      # Создание объекта класса
        forshifr = self.forshifr.toPlainText()  # Взятие текста из поля
        shifr = md.encode(forshifr, key)  # Шифрованное сообщение
        file = open('shifr.txt', 'r')
        lines = file.readlines()
        if len(lines) == 0:
            lines.append(shifr)
        else:
            lines[0] = shifr
        save_changes = open('shifr.txt', 'w')
        save_changes.writelines(lines)
        save_changes.close()
        self.label_no.setText(shifr)      # Вывод на экран шифрованное сообщение

    def on_output2(self):                 # Вывод дешифрованного сообщения
        key = self.key.toPlainText()
        md = MyDES()
        fornoshifr = self.fornoshifr.toPlainText()
        noshifr = md.decode(fornoshifr, key)
        file = open('noshifr.txt', 'r')
        lines = file.readlines()
        if len(lines) == 0:
            lines.append(noshifr)
        else:
            lines[0] = noshifr
        file.close()
        save_changes = open('noshifr.txt', 'w')
        save_changes.writelines(lines)
        save_changes.close()
        self.label_yes.setText(noshifr)
        
        
class WindowRSA(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
# тут ваша логика для  WindowRSA  
#       ...
      

class StackedExample(QWidget):
    def __init__(self):
        super().__init__()
        
        self.horizontalLayoutWidget = QtWidgets.QWidget()
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.addStretch(1)
        self.DES = QtWidgets.QRadioButton("DES", self.horizontalLayoutWidget)
        self.DES.setObjectName("DES")
        self.horizontalLayout.addWidget(self.DES)
        self.RSA = QtWidgets.QRadioButton("RSA", self.horizontalLayoutWidget)
        self.RSA.setObjectName("RSA")
        self.horizontalLayout.addWidget(self.RSA)        
        self.horizontalLayout.addStretch(1)
        
        self.DES.setChecked(True)
        self.DES.toggled.connect(self.display)
        self.RSA.toggled.connect(self.display)
        
        self.stack1 = WindowDES()
        self.stack2 = WindowRSA()
        
        self.stackWidget = QStackedWidget(self)
        self.stackWidget.addWidget(self.stack1)
        self.stackWidget.addWidget(self.stack2)
        
        vbox = QVBoxLayout(self)
        vbox.addWidget(self.horizontalLayoutWidget)
        vbox.addWidget(self.stackWidget)
        
        self.stackWidget.setCurrentIndex(0)
       
    def display(self):
        if self.DES.isChecked():
            self.stackWidget.setCurrentIndex(0)
        elif self.RSA.isChecked():
            self.stackWidget.setCurrentIndex(1)
            

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = StackedExample()
    w.setWindowTitle('StackedWidget demo')
    w.resize(670, 230)
    w.show()
    sys.exit(app.exec_())

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

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

→ Ссылка