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


import sys
from PyQt5.QtWidgets import (
    QApplication, QWidget, QLabel, QLineEdit,
    QPushButton, QVBoxLayout, QHBoxLayout, QGridLayout, QMessageBox
)

from PyQt5.QtCore import Qt

class Calculator(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Простой калькулятор")
        self.setGeometry(300, 200, 400, 300)

        self.init_ui()

    def init_ui(self):
        # Основной вертикальный макет
        main_layout = QVBoxLayout()

        # Поле для ввода первого числа
        self.label1 = QLabel("Первое число:")
        self.input1 = QLineEdit()
        self.input1.setPlaceholderText("Введите число...")

        # Поле для ввода второго числа
        self.label2 = QLabel("Второе число:")
        self.input2 = QLineEdit()
        self.input2.setPlaceholderText("Введите число...")

        # Кнопки операций (сетка 2x2)
        grid = QGridLayout()

        self.btn_add = QPushButton("+")
        self.btn_sub = QPushButton("-")
        self.btn_mul = QPushButton("x")
        self.btn_div = QPushButton("÷")

        # Подключение кнопок к обработчикам
        self.btn_add.clicked.connect(self.add)
        self.btn_sub.clicked.connect(self.sub)
        self.btn_mul.clicked.connect(self.mul)
        self.btn_div.clicked.connect(self.div)

        # Размещение кнопок в сетке
        grid.addWidget(self.btn_add, 0, 0)
        grid.addWidget(self.btn_sub, 0, 1)
        grid.addWidget(self.btn_mul, 1, 0)
        grid.addWidget(self.btn_div, 1, 1)

        # Поле для вывода результата
        self.result_label = QLabel("Результат: ")
        self.result_label.setStyleSheet("font-size: 16px; font-weight: bold;")

        # Кнопка очистки
        self.btn_clear = QPushButton("Очистить")
        self.btn_clear.clicked.connect(self.clear)

        # Добавление всех элементов в главный макет
        main_layout.addWidget(self.label1)
        main_layout.addWidget(self.input1)
        main_layout.addWidget(self.label2)
        main_layout.addWidget(self.input2)
        main_layout.addLayout(grid)
        main_layout.addWidget(self.result_label)
        main_layout.addWidget(self.btn_clear)

        self.setLayout(main_layout)

    def get_numbers(self):
        """Попытка числа из полей ввода с проверкой"""
        try:
            num1 = float(self.input1.text())
            num2 = float(self.input2.text())
            return num1, num2
        except ValueError:
            QMessageBox.warning(self, "Ошибка", "Введите корректные числа!")
            return None, None

    def add(self):
        num1, num2 = self.get_numbers()
        if num1 is not None:
            result = num1 + num2
            self.result_label.setText(f"Результат: {num1} + {num2} = {result}")

    def sub(self):
        num1, num2 = self.get_numbers()
        if num1 is not None:
            result = num1 - num2
            self.result_label.setText(f"Результат: {num1} - {num2} = {result}")

    def mul(self):
        num1, num2 = self.get_numbers()
        if num1 is not None:
            result = num1 * num2
            self.result_label.setText(f"Результат: {num1} x {num2} = {result}")

    def div(self):
        num1, num2 = self.get_numbers()
        if num1 is not None:
            if num2 == 0:
                QMessageBox.warning(self, "Ошибка", "Деление на ноль невозможно!")
                return
            result = num1 / num2
            self.result_label.setText(f"Результат: {num1} ÷ {num2} = {result:.2f}")

    def clear(self):
        self.input1.clear()
        self.input2.clear()
        self.result_label.setText("Результат: ")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    calc = Calculator()
    calc.show()
    sys.exit(app.exec_())