Загрузка данных


import sys
from math import gcd

from PyQt6.QtWidgets import QApplication, QMainWindow

from percent import Ui_MainWindow


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Вкладка 1
        self.ui.calcButton.clicked.connect(self.percent_of_number)

        # Вкладка 2
        self.ui.percentXYButton.clicked.connect(self.x_from_y)

        # Вкладка 3
        self.ui.addButton.clicked.connect(self.add_percent)

        # Вкладка 4
        self.ui.subButton.clicked.connect(self.sub_percent)

        # Вкладка 5
        self.ui.calculateGcdLcmButton.clicked.connect(self.gcd_lcm)

        # Радиокнопки
        self.ui.radio3.setChecked(True)

        self.ui.radio2.toggled.connect(self.update_fields)
        self.ui.radio3.toggled.connect(self.update_fields)
        self.ui.radio4.toggled.connect(self.update_fields)

        self.update_fields()

    # Скрытие и отображение полей
    def update_fields(self):

        if self.ui.radio2.isChecked():

            self.ui.num3Edit.hide()
            self.ui.num4Edit.hide()

            self.ui.label_18.hide()
            self.ui.label_19.hide()

        elif self.ui.radio3.isChecked():

            self.ui.num3Edit.show()
            self.ui.num4Edit.hide()

            self.ui.label_18.show()
            self.ui.label_19.hide()

        elif self.ui.radio4.isChecked():

            self.ui.num3Edit.show()
            self.ui.num4Edit.show()

            self.ui.label_18.show()
            self.ui.label_19.show()

    # Процент от числа
    def percent_of_number(self):
        try:
            percent = float(self.ui.percentEdit.text())
            number = float(self.ui.numberEdit.text())

            result = number * percent / 100

            self.ui.resultLabel.setText(
                f"Результат: {result}"
            )

        except ValueError:
            self.ui.resultLabel.setText(
                "Ошибка ввода"
            )

    # Сколько процентов составляет X от Y
    def x_from_y(self):
        try:
            x = float(self.ui.xEdit.text())
            y = float(self.ui.yEdit.text())

            result = x / y * 100

            self.ui.resultXYButton.setText(
                f"Результат: {result:.2f}%"
            )

        except ValueError:
            self.ui.resultXYButton.setText(
                "Ошибка ввода"
            )

    # Прибавить процент
    def add_percent(self):
        try:
            number = float(self.ui.addNumberEdit.text())
            percent = float(self.ui.addPercentEdit.text())

            result = number + number * percent / 100

            self.ui.addResultLabel.setText(
                f"Результат: {result}"
            )

        except ValueError:
            self.ui.addResultLabel.setText(
                "Ошибка ввода"
            )

    # Вычесть процент
    def sub_percent(self):
        try:
            number = float(self.ui.subNumberEdit.text())
            percent = float(self.ui.subPercentEdit.text())

            result = number - number * percent / 100

            self.ui.subResultLabel.setText(
                f"Результат: {result}"
            )

        except ValueError:
            self.ui.subResultLabel.setText(
                "Ошибка ввода"
            )

    # НОД и НОК
    def gcd_lcm(self):
        try:
            a = int(self.ui.num1Edit.text())
            b = int(self.ui.num2Edit.text())

            if self.ui.radio2.isChecked():

                nod = gcd(a, b)
                nok = a * b // nod

            elif self.ui.radio3.isChecked():

                c = int(self.ui.num3Edit.text())

                nod = gcd(gcd(a, b), c)

                nok = a * b // gcd(a, b)
                nok = nok * c // gcd(nok, c)

            else:

                c = int(self.ui.num3Edit.text())
                d = int(self.ui.num4Edit.text())

                nod = gcd(gcd(gcd(a, b), c), d)

                nok = a * b // gcd(a, b)
                nok = nok * c // gcd(nok, c)
                nok = nok * d // gcd(nok, d)

            self.ui.resultGcdLcmLabel.setText(
                f"НОД = {nod}\nНОК = {nok}"
            )

        except ValueError:
            self.ui.resultGcdLcmLabel.setText(
                "Ошибка ввода"
            )


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec())