/
pi-svetlana
/
CalculatorPython
Обзор
Документация
Войти
/
pi-svetlana
/
CalculatorPython
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/view/view.py
180 строк
8 KB
pi-svetlana
calculator
17 ноя 2024, 17:19
17 ноя 2024, 17:19
4ec612c
Код
Авторство
О чём код?
from PyQt5 import QtWidgets from PyQt5.QtCore import QSettings # from pyqtgraph import mkPen from view.design import Ui_View class View(QtWidgets.QMainWindow, Ui_View): def __init__(self): super().__init__() self.setupUi(self) self.add_connections() self.load_history() def set_presenter(self, presenter): self.presenter = presenter def add_connections(self): self.one_btn.clicked.connect(lambda: self.write_number(self.one_btn.text())) self.two_btn.clicked.connect(lambda: self.write_number(self.two_btn.text())) self.three_btn.clicked.connect(lambda: self.write_number(self.three_btn.text())) self.four_btn.clicked.connect(lambda: self.write_number(self.four_btn.text())) self.five_btn.clicked.connect(lambda: self.write_number(self.five_btn.text())) self.six_btn.clicked.connect(lambda: self.write_number(self.six_btn.text())) self.seven_btn.clicked.connect(lambda: self.write_number(self.seven_btn.text())) self.eight_btn.clicked.connect(lambda: self.write_number(self.eight_btn.text())) self.nine_btn.clicked.connect(lambda: self.write_number(self.nine_btn.text())) self.zero_btn.clicked.connect(lambda: self.write_number(self.zero_btn.text())) self.div_btn.clicked.connect(lambda: self.write_number(self.div_btn.text())) self.plus_btn.clicked.connect(lambda: self.write_number(self.plus_btn.text())) self.minus_btn.clicked.connect(lambda: self.write_number(self.minus_btn.text())) self.mul_btn.clicked.connect(lambda: self.write_number(self.mul_btn.text())) self.pow_btn.clicked.connect(lambda: self.write_number(self.pow_btn.text())) self.left_brc_btn.clicked.connect(lambda: self.write_number(self.left_brc_btn.text())) self.right_brc_btn.clicked.connect(lambda: self.write_number(self.right_brc_btn.text())) self.x_btn.clicked.connect(lambda: self.write_number(self.x_btn.text())) self.mod_btn.clicked.connect(lambda: self.write_number(self.mod_btn.text())) self.e_btn.clicked.connect(lambda: self.write_number(self.e_btn.text())) self.dot_btn.clicked.connect(lambda: self.write_number(self.dot_btn.text())) self.sin_btn.clicked.connect(lambda: self.write_function(self.sin_btn.text())) self.cos_btn.clicked.connect(lambda: self.write_function(self.cos_btn.text())) self.tan_btn.clicked.connect(lambda: self.write_function(self.tan_btn.text())) self.asin_btn.clicked.connect(lambda: self.write_function(self.asin_btn.text())) self.acos_btn.clicked.connect(lambda: self.write_function(self.acos_btn.text())) self.atan_btn.clicked.connect(lambda: self.write_function(self.atan_btn.text())) self.sqrt_btn.clicked.connect(lambda: self.write_function(self.sqrt_btn.text())) self.ln_btn.clicked.connect(lambda: self.write_function(self.ln_btn.text())) self.log_btn.clicked.connect(lambda: self.write_function(self.log_btn.text())) self.backspace_btn.clicked.connect(lambda: self.backspace_clicked()) self.ac_btn.clicked.connect(lambda: self.ac_clicked()) self.equal_btn.clicked.connect(lambda: self.equal_clicked()) self.clear_history_btn.clicked.connect(lambda: self.clear_history_clicked()) self.show_grath_btn.clicked.connect(lambda: self.show_graph_clicked()) self.history.activated.connect(lambda index: self.select_from_history(self.history.itemText(index))) self.count_credit_btn.clicked.connect(lambda: self.count_credit_clicked()) def write_number(self, number): self.expression.setText(self.expression.text() + number) def write_function(self, number): self.expression.setText(self.expression.text() + number + "(") def backspace_clicked(self): self.expression.setText(self.expression.text()[:-1]) def ac_clicked(self): self.expression.clear() self.error.clear() self.result.clear() def equal_clicked(self): try: x = float(self.x_val.text()) except ValueError: x = 1 self.x_val.setText("1") if self.expression.text(): self.presenter.calculate_result(self.expression.text(), x) def clear_history_clicked(self): self.history.clear() def select_from_history(self, text): self.expression.setText(text) self.equal_clicked() def show_graph_clicked(self): try: min_x = float(self.x_min.text()) max_x = float(self.x_max.text()) min_y = float(self.y_min.text()) max_y = float(self.y_max.text()) if min_x <= -1000000 or max_x > 1000000 or min_x >= max_x or min_y <= -1000000 or max_y > 1000000 or min_y >= max_y: min_x = -5 max_x = 5 self.set_default_val() except ValueError: self.set_default_val() min_x = -5 max_x = 5 if self.expression.text(): self.presenter.calculate_graph_result(self.expression.text(), min_x, max_x) def draw_graph(self, x_vals, y_vals, error_message=None): if error_message: self.error.setText(error_message) self.result.clear() else: self.graph.clear() min_y = float(self.y_min.text()) max_y = float(self.y_max.text()) self.graph.setYRange(min_y, max_y) self.graph.setXRange(x_vals[0], x_vals[-1]) self.graph.plot(x_vals, y_vals, pen='r', symbol='o', symbolBrush='b') # self.graph.plot(x_vals, y_vals, pen=mkPen('r', width=5)) self.error.clear() def set_default_val(self): self.x_min.setText("-5") self.x_max.setText("5") self.y_min.setText("-5") self.y_max.setText("5") def set_result(self, result, error_message=None): if error_message: self.error.setText(error_message) self.result.clear() else: if self.history.findText(self.expression.text()) == -1 and self.expression.text(): self.history.insertItem(0, self.expression.text()) self.result.setText(str(result)) self.error.clear() def count_credit_clicked(self): credit_sum = self.credit_sum.value() credit_term = self.credit_term.value() credit_percent = self.credit_percent.value() annuit = self.annuity.isChecked() if (annuit): type = 0 else: type = 1 self.presenter.count_credit(credit_sum, credit_term, credit_percent, type) def set_credit_data(self, credit_total, overpay, payments): self.payment.clear() self.percent_out.clear() self.credit_and_percent.clear() self.month_payment.clearContents() self.month_payment.setRowCount(0) annuit = self.annuity.isChecked() if (annuit): self.payment.setText(str(round(payments[0], 2))) else: self.payment.setText(f"{str(round(payments[0], 2))} ... {str(round(payments[-1], 2))}") self.percent_out.setText(str(round(overpay, 2))) self.credit_and_percent.setText(str(round(credit_total, 2))) if (not annuit): for i in range(len(payments)): self.month_payment.insertRow(i) self.month_payment.setItem(i, 0, QtWidgets.QTableWidgetItem(str(round(payments[i], 2)))) def load_history(self): settings = QSettings("School_21", "SmartCalc") history = settings.value("history", []) self.history.addItems(history) def save_history(self): settings = QSettings("School_21", "SmartCalc") history = [self.history.itemText(i) for i in range(self.history.count())] settings.setValue("history", history) def closeEvent(self, event): self.save_history() # self.presenter.close_app() event.accept()