Разбивка на модули кода для однооконного приложения Python

Рейтинг: 1Ответов: 1Опубликовано: 10.04.2023

Создаю приложение. Интерфейс создается в Qt Designer. Все действия будут происходить в одном окне.

Структура следующая. введите сюда описание изображения

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

Из меню вызывается одна из страниц stackedWidget, на которой расположен tabWidget. На каждой вкладке tabWidget расположены поля для ввода/вывода информации и кнопки, а так же кнопка для печати отчета в pdf.
По сути каждая вкладка это самостоятельный расчет. В tabWidget они объединены по функциональному признаку.
Для каждой вкладки tabWidget получается достаточно большой код программы.

Сейчас у меня создан один класс

class MyProgram(QMainWindow):

в котором методы описывающие действия на форме: ввод данных, нажатие кнопок.

По задумке хотел каждый расчет (вкладку tab) вынести в отдельный модуль (файл). Чтобы было проще ориентироваться в коде и в последствии добавлять новые расчеты.

В настоящий момент написан код для одной вкладки. Не могу понять как разбить код на модули, каким функционалом воспользоваться.
Возможно ли это технически? Или при данной структуре меню нужно все делать в одном классе и соответственно в одном модуле?
В какую стороны копать? Читал про наследование и т.п. Картинка в голове не сложилась. Прошу совета.

Минимальный воспроизводимый пример. Так как минимизировать и воспроизвести несколько тысяч строк кода, что бы было понятно, достаточно трудно. Сделал аналог программы в миниатюре. Вычислительные функции упростил, а идею полностью сохранил.

При запуске имеем начальное окно: введите сюда описание изображения

При выборе первого меню (Сложение Вычитание) открывается окно: введите сюда описание изображения

Если выбрать вкладку разность: введите сюда описание изображения

При выборе меню Умножение Деление введите сюда описание изображения введите сюда описание изображения

Код:

import sys

from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow, QApplication


class MyProgram(QMainWindow):       
    def __init__(self):             
        super().__init__()  
        uic.loadUi('Form/Test.ui', self)
        self.initUI()

    def initUI(self):
        self.actionSumDifference.triggered.connect(self.window_sum_difference)      # Выбор меню Сумма Разность
        self.actionWorkDivision.triggered.connect(self.window_work_division)        # Выбор меню Умножение Деление
        self.pushButtonSum.clicked.connect(self.calculation_sum)                    # Кнопка вычисления суммы
        self.pushButtonDifference.clicked.connect(self.calculation_difference)      # Кнопка вычисления разности
        self.pushButtonWork.clicked.connect(self.calculation_work)                  # Кнопка вычисления произведения
        self.pushButtonQuotient.clicked.connect(self.calculation_quotient)          # Кнопка вычисления деления

    def window_sum_difference(self):
        self.stackedWidget.setCurrentWidget(self.pageSumDifference)

    def window_work_division(self):
        self.stackedWidget.setCurrentWidget(self.pageWorkDivision)

    def calculation_sum(self):
        a = float(self.lineEdiTerm1.text())
        b = float(self.lineEdiTerm2.text())
        s = a + b
        self.lineEditSum.setText(str("%.2f" % s))

    def calculation_difference(self):
        a = float(self.lineEditMinuend.text())
        b = float(self.lineEditSubtrahend.text())
        d = a - b
        self.lineEditDifference.setText(str("%.2f" % d))

    def calculation_work(self):
        a = float(self.lineEditFactor1.text())
        b = float(self.lineEditFactor2.text())
        p = a * b
        self.lineEditWork.setText(str("%.2f" % p))

    def calculation_quotient(self):
        a = float(self.lineEditDividend.text())
        b = float(self.lineEditDivider.text())
        q = a / b
        self.lineEditQuotient.setText(str("%.2f" % q))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyProgram()
    ex.show()
    sys.exit(app.exec_())

Вопрос: Как вынести вычисления суммы, разности, произведения и деления каждый в отдельный модуль, если такое возможно?

Не знаю правильно или нет. Как смог получил Test.ui

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 260)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
        self.stackedWidget.setObjectName("stackedWidget")
        self.pageSumDifference = QtWidgets.QWidget()
        self.pageSumDifference.setObjectName("pageSumDifference")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.pageSumDifference)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.tabWidgeSumDifference = QtWidgets.QTabWidget(self.pageSumDifference)
        self.tabWidgeSumDifference.setObjectName("tabWidgeSumDifference")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.formLayout = QtWidgets.QFormLayout(self.tab)
        self.formLayout.setObjectName("formLayout")
        self.label = QtWidgets.QLabel(self.tab)
        self.label.setObjectName("label")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
        self.lineEdiTerm1 = QtWidgets.QLineEdit(self.tab)
        self.lineEdiTerm1.setObjectName("lineEdiTerm1")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdiTerm1)
        self.label_2 = QtWidgets.QLabel(self.tab)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
        self.lineEdiTerm2 = QtWidgets.QLineEdit(self.tab)
        self.lineEdiTerm2.setObjectName("lineEdiTerm2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdiTerm2)
        self.pushButtonSum = QtWidgets.QPushButton(self.tab)
        self.pushButtonSum.setObjectName("pushButtonSum")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonSum)
        self.label_3 = QtWidgets.QLabel(self.tab)
        self.label_3.setObjectName("label_3")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_3)
        self.lineEditSum = QtWidgets.QLineEdit(self.tab)
        self.lineEditSum.setObjectName("lineEditSum")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditSum)
        self.tabWidgeSumDifference.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.formLayout_2 = QtWidgets.QFormLayout(self.tab_2)
        self.formLayout_2.setObjectName("formLayout_2")
        self.label_4 = QtWidgets.QLabel(self.tab_2)
        self.label_4.setObjectName("label_4")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_4)
        self.lineEditMinuend = QtWidgets.QLineEdit(self.tab_2)
        self.lineEditMinuend.setObjectName("lineEditMinuend")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEditMinuend)
        self.label_5 = QtWidgets.QLabel(self.tab_2)
        self.label_5.setObjectName("label_5")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_5)
        self.lineEditSubtrahend = QtWidgets.QLineEdit(self.tab_2)
        self.lineEditSubtrahend.setObjectName("lineEditSubtrahend")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEditSubtrahend)
        self.pushButtonDifference = QtWidgets.QPushButton(self.tab_2)
        self.pushButtonDifference.setObjectName("pushButtonDifference")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonDifference)
        self.label_6 = QtWidgets.QLabel(self.tab_2)
        self.label_6.setObjectName("label_6")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_6)
        self.lineEditDifference = QtWidgets.QLineEdit(self.tab_2)
        self.lineEditDifference.setObjectName("lineEditDifference")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditDifference)
        self.tabWidgeSumDifference.addTab(self.tab_2, "")
        self.gridLayout_2.addWidget(self.tabWidgeSumDifference, 0, 0, 1, 1)
        self.stackedWidget.addWidget(self.pageSumDifference)
        self.page = QtWidgets.QWidget()
        self.page.setObjectName("page")
        self.label_13 = QtWidgets.QLabel(self.page)
        self.label_13.setGeometry(QtCore.QRect(220, 80, 381, 24))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label_13.setFont(font)
        self.label_13.setObjectName("label_13")
        self.stackedWidget.addWidget(self.page)
        self.pageWorkDivision = QtWidgets.QWidget()
        self.pageWorkDivision.setObjectName("pageWorkDivision")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.pageWorkDivision)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.tabWidgeWorkDivision = QtWidgets.QTabWidget(self.pageWorkDivision)
        self.tabWidgeWorkDivision.setObjectName("tabWidgeWorkDivision")
        self.tab_3 = QtWidgets.QWidget()
        self.tab_3.setObjectName("tab_3")
        self.formLayout_3 = QtWidgets.QFormLayout(self.tab_3)
        self.formLayout_3.setObjectName("formLayout_3")
        self.label_7 = QtWidgets.QLabel(self.tab_3)
        self.label_7.setObjectName("label_7")
        self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_7)
        self.lineEditFactor1 = QtWidgets.QLineEdit(self.tab_3)
        self.lineEditFactor1.setObjectName("lineEditFactor1")
        self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEditFactor1)
        self.label_8 = QtWidgets.QLabel(self.tab_3)
        self.label_8.setObjectName("label_8")
        self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_8)
        self.lineEditFactor2 = QtWidgets.QLineEdit(self.tab_3)
        self.lineEditFactor2.setObjectName("lineEditFactor2")
        self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEditFactor2)
        self.pushButtonWork = QtWidgets.QPushButton(self.tab_3)
        self.pushButtonWork.setObjectName("pushButtonWork")
        self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonWork)
        self.label_9 = QtWidgets.QLabel(self.tab_3)
        self.label_9.setObjectName("label_9")
        self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_9)
        self.lineEditWork = QtWidgets.QLineEdit(self.tab_3)
        self.lineEditWork.setObjectName("lineEditWork")
        self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditWork)
        self.tabWidgeWorkDivision.addTab(self.tab_3, "")
        self.tab_4 = QtWidgets.QWidget()
        self.tab_4.setObjectName("tab_4")
        self.formLayout_4 = QtWidgets.QFormLayout(self.tab_4)
        self.formLayout_4.setObjectName("formLayout_4")
        self.label_10 = QtWidgets.QLabel(self.tab_4)
        self.label_10.setObjectName("label_10")
        self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_10)
        self.lineEditDividend = QtWidgets.QLineEdit(self.tab_4)
        self.lineEditDividend.setObjectName("lineEditDividend")
        self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEditDividend)
        self.label_11 = QtWidgets.QLabel(self.tab_4)
        self.label_11.setObjectName("label_11")
        self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_11)
        self.lineEditDivider = QtWidgets.QLineEdit(self.tab_4)
        self.lineEditDivider.setObjectName("lineEditDivider")
        self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEditDivider)
        self.pushButtonQuotient = QtWidgets.QPushButton(self.tab_4)
        self.pushButtonQuotient.setObjectName("pushButtonQuotient")
        self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonQuotient)
        self.label_12 = QtWidgets.QLabel(self.tab_4)
        self.label_12.setObjectName("label_12")
        self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_12)
        self.lineEditQuotient = QtWidgets.QLineEdit(self.tab_4)
        self.lineEditQuotient.setObjectName("lineEditQuotient")
        self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditQuotient)
        self.tabWidgeWorkDivision.addTab(self.tab_4, "")
        self.gridLayout_3.addWidget(self.tabWidgeWorkDivision, 0, 0, 1, 1)
        self.stackedWidget.addWidget(self.pageWorkDivision)
        self.horizontalLayout.addWidget(self.stackedWidget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionSumDifference = QtWidgets.QAction(MainWindow)
        self.actionSumDifference.setObjectName("actionSumDifference")
        self.actionWorkDivision = QtWidgets.QAction(MainWindow)
        self.actionWorkDivision.setObjectName("actionWorkDivision")
        self.menu.addAction(self.actionSumDifference)
        self.menu.addAction(self.actionWorkDivision)
        self.menubar.addAction(self.menu.menuAction())

        self.retranslateUi(MainWindow)
        self.stackedWidget.setCurrentIndex(1)
        self.tabWidgeSumDifference.setCurrentIndex(0)
        self.tabWidgeWorkDivision.setCurrentIndex(1)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Слагаемое 1"))
        self.label_2.setText(_translate("MainWindow", "Слагаемое 2"))
        self.pushButtonSum.setText(_translate("MainWindow", "Расчет"))
        self.label_3.setText(_translate("MainWindow", "Сумма"))
        self.tabWidgeSumDifference.setTabText(self.tabWidgeSumDifference.indexOf(self.tab), _translate("MainWindow", "Сумма"))
        self.label_4.setText(_translate("MainWindow", "Уменьшаемое"))
        self.label_5.setText(_translate("MainWindow", "Вычитаемое"))
        self.pushButtonDifference.setText(_translate("MainWindow", "Расчет"))
        self.label_6.setText(_translate("MainWindow", "Разность"))
        self.tabWidgeSumDifference.setTabText(self.tabWidgeSumDifference.indexOf(self.tab_2), _translate("MainWindow", "Разность"))
        self.label_13.setText(_translate("MainWindow", "Математическая программка"))
        self.label_7.setText(_translate("MainWindow", "Множитель 1"))
        self.label_8.setText(_translate("MainWindow", "Множитель 2"))
        self.pushButtonWork.setText(_translate("MainWindow", "Расчет"))
        self.label_9.setText(_translate("MainWindow", "Произведение"))
        self.tabWidgeWorkDivision.setTabText(self.tabWidgeWorkDivision.indexOf(self.tab_3), _translate("MainWindow", "Умножение"))
        self.label_10.setText(_translate("MainWindow", "Делимое"))
        self.label_11.setText(_translate("MainWindow", "Делитель"))
        self.pushButtonQuotient.setText(_translate("MainWindow", "Расчет"))
        self.label_12.setText(_translate("MainWindow", "Частное"))
        self.tabWidgeWorkDivision.setTabText(self.tabWidgeWorkDivision.indexOf(self.tab_4), _translate("MainWindow", "Деление"))
        self.menu.setTitle(_translate("MainWindow", "Меню"))
        self.actionSumDifference.setText(_translate("MainWindow", "Сложение Вычитание"))
        self.actionWorkDivision.setText(_translate("MainWindow", "Умножение Деление"))

Ответы

▲ 0Принят

Попробуйте так:

q1512096_main.py

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

from q1512096_sum_difference import PageSumDifference
from q1512096_work_division import PageWorkDivision


class MainWindow(QMainWindow):       
    def __init__(self):             
        super().__init__()  
        self.centralwidget = QtWidgets.QWidget()
        self.centralwidget.setObjectName("centralwidget")
        self.setCentralWidget(self.centralwidget)

        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
        self.stackedWidget.setObjectName("stackedWidget")
        
        self.page = QtWidgets.QWidget()
        self.page.setObjectName("page")
        self.label_13 = QtWidgets.QLabel(self.page)
        self.label_13.setText("Математическая программка")
        self.label_13.setGeometry(QtCore.QRect(220, 80, 381, 24))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label_13.setFont(font)
        self.label_13.setObjectName("label_13")
        self.stackedWidget.addWidget(self.page)

        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)        
        self.horizontalLayout.addWidget(self.stackedWidget)
        
        self.pageSumDifference = PageSumDifference()
        self.stackedWidget.addWidget(self.pageSumDifference) 
        
        self.pageWorkDivision = PageWorkDivision()
        self.stackedWidget.addWidget(self.pageWorkDivision)

        self.menubar = QtWidgets.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setTitle("Меню")
        self.menu.setObjectName("menu")
        self.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
        self.actionSumDifference = QtWidgets.QAction(self)
        self.actionSumDifference.setObjectName("actionSumDifference")
        self.actionWorkDivision = QtWidgets.QAction(self)
        self.actionWorkDivision.setObjectName("actionWorkDivision")
        self.menu.addAction(self.actionSumDifference)
        self.menu.addAction(self.actionWorkDivision)
        self.menubar.addAction(self.menu.menuAction())

        self.actionSumDifference.setText("Сложение Вычитание")
        self.actionSumDifference.triggered.connect(self.window_sum_difference) 
        self.actionWorkDivision.setText("Умножение Деление")
        self.actionWorkDivision.triggered.connect(self.window_work_division) 

        self.page.setStyleSheet('background-color: #D98;')

    def window_sum_difference(self):
        self.stackedWidget.setCurrentIndex(1)

    def window_work_division(self):
        self.stackedWidget.setCurrentIndex(2)
        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.resize(800, 260)
    w.show()
    sys.exit(app.exec_())

q1512096_sum_difference.py

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

from q1512096_sum import CalculationAmount
from q1512096_difference import CalculationDifference


class PageSumDifference(QFrame):            
    def __init__(self):
        super().__init__()
        self.setObjectName("pageSumDifference")
        
        self.tabWidgeSumDifference = QtWidgets.QTabWidget(self)
        self.tabWidgeSumDifference.setObjectName("tabWidgeSumDifference")

        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.formLayout = QtWidgets.QFormLayout(self.tab)
        self.formLayout.setObjectName("formLayout")
        self.label = QtWidgets.QLabel("Слагаемое 1", self.tab)
        self.label.setObjectName("label")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
        self.lineEdiTerm1 = QtWidgets.QLineEdit(self.tab)
        self.lineEdiTerm1.setObjectName("lineEdiTerm1")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdiTerm1)
        self.label_2 = QtWidgets.QLabel("Слагаемое 2", self.tab)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
        self.lineEdiTerm2 = QtWidgets.QLineEdit(self.tab)
        self.lineEdiTerm2.setObjectName("lineEdiTerm2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdiTerm2)
        self.pushButtonSum = QtWidgets.QPushButton("Сумма", self.tab)
        self.pushButtonSum.setObjectName("pushButtonSum")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonSum)
        self.label_3 = QtWidgets.QLabel("Сумма", self.tab)
        self.label_3.setObjectName("label_3")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_3)
        self.lineEditSum = QtWidgets.QLineEdit(self.tab)
        self.lineEditSum.setObjectName("lineEditSum")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditSum)
        self.tabWidgeSumDifference.addTab(self.tab, "Сумма")

        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.formLayout_2 = QtWidgets.QFormLayout(self.tab_2)
        self.formLayout_2.setObjectName("formLayout_2")
        self.label_4 = QtWidgets.QLabel("Уменьшаемое", self.tab_2)
        self.label_4.setObjectName("label_4")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_4)
        self.lineEditMinuend = QtWidgets.QLineEdit(self.tab_2)
        self.lineEditMinuend.setObjectName("lineEditMinuend")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEditMinuend)
        self.label_5 = QtWidgets.QLabel("Вычитаемое", self.tab_2)
        self.label_5.setObjectName("label_5")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_5)
        self.lineEditSubtrahend = QtWidgets.QLineEdit(self.tab_2)
        self.lineEditSubtrahend.setObjectName("lineEditSubtrahend")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEditSubtrahend)
        self.pushButtonDifference = QtWidgets.QPushButton("Расчет", self.tab_2)
        self.pushButtonDifference.setObjectName("pushButtonDifference")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonDifference)
        self.label_6 = QtWidgets.QLabel("Разность", self.tab_2)
        self.label_6.setObjectName("label_6")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_6)
        self.lineEditDifference = QtWidgets.QLineEdit(self.tab_2)
        self.lineEditDifference.setObjectName("lineEditDifference")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditDifference)
        self.tabWidgeSumDifference.addTab(self.tab_2, "Разность")

        self.gridLayout_2 = QtWidgets.QGridLayout(self)
        self.gridLayout_2.addWidget(self.tabWidgeSumDifference, 0, 0, 1, 1)
        
        self.setStyleSheet('''
            #pageSumDifference {
                background-color: #D98C00;
            }
            #tab {
                background-color: #8C00D9;
            }
        ''')
        
        self.pushButtonSum.clicked.connect(self.calculation_sum)                    # Кнопка вычисления суммы
        self.pushButtonDifference.clicked.connect(self.calculation_difference)   
        
        self.calculationAmount = CalculationAmount(self)
        self.calculationAmount.hide()
        
        self.calculationDifference = CalculationDifference(self)
        self.calculationDifference.hide()
        
        
    def calculation_sum(self):
        s = self.calculationAmount._sum()
        if not s is None:
            self.lineEditSum.setText(f"{s:.2f}")

    def calculation_difference(self):
        d = self.calculationDifference._difference()
        if not d is None:
            self.lineEditDifference.setText(f"{d:.2f}")    

q1512096_sum.py

from PyQt5.Qt import *

class CalculationAmount(QWidget):
    def __init__(self, parent=None):
        super(CalculationAmount, self).__init__(parent)
        self.parent = parent
        
    def _sum(self):
        try:
            a = float(self.parent.lineEdiTerm1.text())
            b = float(self.parent.lineEdiTerm2.text())
            s = a + b
        except:
            msg = QMessageBox.information(self, 
                'Внимание', 
                'Введите правильные слагаемые.')
            s = None
        return s

q1512096_difference.py

from PyQt5.Qt import *

class CalculationDifference(QWidget):
    def __init__(self, parent=None):
        super(CalculationDifference, self).__init__(parent)
        self.parent = parent
        
    def _difference(self):
        try:
            a = float(self.parent.lineEditMinuend.text())
            b = float(self.parent.lineEditSubtrahend.text())
            d = a - b
        except:
            msg = QMessageBox.information(self, 
                'Внимание', 
                'Введите правильные данные.')
            d = None
        return d

q1512096_work_division.py

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

from q1512096_multiplication import CalculationMultiplication
from q1512096_divide import CalculationDivide


class PageWorkDivision(QFrame):            
    def __init__(self):
        super().__init__()
        self.setObjectName("pageWorkDivision")
        
        self.gridLayout_3 = QtWidgets.QGridLayout(self)

        self.tabWidgeWorkDivision = QtWidgets.QTabWidget(self)
        self.tabWidgeWorkDivision.setObjectName("tabWidgeWorkDivision")
        self.tab_3 = QtWidgets.QWidget()
        self.tab_3.setObjectName("tab_3")
        self.formLayout_3 = QtWidgets.QFormLayout(self.tab_3)
        self.formLayout_3.setObjectName("formLayout_3")
        self.label_7 = QtWidgets.QLabel("Множитель 1", self.tab_3)
        self.label_7.setObjectName("label_7")
        self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_7)
        self.lineEditFactor1 = QtWidgets.QLineEdit(self.tab_3)
        self.lineEditFactor1.setObjectName("lineEditFactor1")
        self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEditFactor1)
        self.label_8 = QtWidgets.QLabel("Множитель 2", self.tab_3)
        self.label_8.setObjectName("label_8")
        self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_8)
        self.lineEditFactor2 = QtWidgets.QLineEdit(self.tab_3)
        self.lineEditFactor2.setObjectName("lineEditFactor2")
        self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEditFactor2)
        self.pushButtonWork = QtWidgets.QPushButton("Расчет", self.tab_3)
        self.pushButtonWork.setObjectName("pushButtonWork")
        self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonWork)
        self.label_9 = QtWidgets.QLabel("Произведение", self.tab_3)
        self.label_9.setObjectName("label_9")
        self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_9)
        self.lineEditWork = QtWidgets.QLineEdit(self.tab_3)
        self.lineEditWork.setObjectName("lineEditWork")
        self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditWork)
        self.tabWidgeWorkDivision.addTab(self.tab_3, "Умножение")
        self.tab_4 = QtWidgets.QWidget()
        self.tab_4.setObjectName("tab_4")
        self.formLayout_4 = QtWidgets.QFormLayout(self.tab_4)
        self.formLayout_4.setObjectName("formLayout_4")
        self.label_10 = QtWidgets.QLabel("Делимое", self.tab_4)
        self.label_10.setObjectName("label_10")
        self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_10)
        self.lineEditDividend = QtWidgets.QLineEdit(self.tab_4)
        self.lineEditDividend.setObjectName("lineEditDividend")
        self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEditDividend)
        self.label_11 = QtWidgets.QLabel("Делитель", self.tab_4)
        self.label_11.setObjectName("label_11")
        self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_11)
        self.lineEditDivider = QtWidgets.QLineEdit(self.tab_4)
        self.lineEditDivider.setObjectName("lineEditDivider")
        self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEditDivider)
        self.pushButtonQuotient = QtWidgets.QPushButton("Расчет", self.tab_4)
        self.pushButtonQuotient.setObjectName("pushButtonQuotient")
        self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pushButtonQuotient)
        self.label_12 = QtWidgets.QLabel("Частное", self.tab_4)
        self.label_12.setObjectName("label_12")
        self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_12)
        self.lineEditQuotient = QtWidgets.QLineEdit(self.tab_4)
        self.lineEditQuotient.setObjectName("lineEditQuotient")
        self.formLayout_4.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEditQuotient)
        self.tabWidgeWorkDivision.addTab(self.tab_4, "Деление")
        self.gridLayout_3.addWidget(self.tabWidgeWorkDivision, 0, 0, 1, 1)

        self.pushButtonWork.clicked.connect(self.calculation_work)                  # Кнопка вычисления произведения
        self.pushButtonQuotient.clicked.connect(self.calculation_quotient)     
        
        self.calculationMultiplication = CalculationMultiplication(self)
        self.calculationMultiplication.hide()
        
        self.calculationDivide = CalculationDivide(self)
        self.calculationDivide.hide()

    def calculation_work(self):
        p = self.calculationMultiplication._multiplication()
        if not p is None:
            self.lineEditWork.setText(f"{p:.2f}")    

    def calculation_quotient(self):
        q = self.calculationDivide._divide()
        if not q is None:
            self.lineEditQuotient.setText(f"{q:.2f}")

q1512096_multiplication.py

from PyQt5.Qt import *

class CalculationMultiplication(QWidget):
    def __init__(self, parent=None):
        super(CalculationMultiplication, self).__init__(parent)
        self.parent = parent
        
    def _multiplication(self):
        try:
            a = float(self.parent.lineEditFactor1.text())
            b = float(self.parent.lineEditFactor2.text())
            p = a * b
        except:
            msg = QMessageBox.information(self, 
                'Внимание', 
                'Введите правильные данные.')
            p = None
        return p

q1512096_divide.py

from PyQt5.Qt import *

class CalculationDivide(QWidget):
    def __init__(self, parent=None):
        super(CalculationDivide, self).__init__(parent)
        self.parent = parent
        
    def _divide(self):
        try:
            a = float(self.parent.lineEditDividend.text())
            b = float(self.parent.lineEditDivider.text())
            q = a / b
        except:
            msg = QMessageBox.information(self, 
                'Внимание', 
                'Введите правильные данные.')
            q = None
        return q

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

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