Загрузка данных
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_())