Разбивка на модули кода для однооконного приложения Python
Создаю приложение. Интерфейс создается в 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", "Умножение Деление"))
Ответы (1 шт):
Попробуйте так:
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



