From 0fa51fd003dad04528e3bcd1af66f675b76f7d05 Mon Sep 17 00:00:00 2001 From: Danya_Mochalov Date: Fri, 12 Apr 2024 02:25:09 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=B0=2010=20=D1=81=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab10/lab10.py | 122 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 lab10/lab10.py diff --git a/lab10/lab10.py b/lab10/lab10.py new file mode 100644 index 0000000..6e53156 --- /dev/null +++ b/lab10/lab10.py @@ -0,0 +1,122 @@ +import sys +from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QLineEdit, QPushButton, QColorDialog, QTableWidget, QTableWidgetItem, QHeaderView +from PyQt5.QtGui import QColor +import pyqtgraph as pg +import random + + +class FuzzyScaleApp(QMainWindow): + def __init__(self): + super().__init__() + self.setWindowTitle("Оценка прибыли") + self.setGeometry(100, 100, 800, 600) + + self.plot_widget = pg.PlotWidget() + self.table_widget = QTableWidget() + self.table_widget.setColumnCount(6) + self.table_widget.setHorizontalHeaderLabels(["Название", "Тип", "a", "b", "c", "d"]) + self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) + + self.add_btn = QPushButton("Добавить") + self.remove_btn = QPushButton("Удалить") + self.update_btn = QPushButton("Обновить график") + + main_widget = QWidget() + main_layout = QVBoxLayout() + main_layout.addWidget(self.plot_widget) + main_layout.addWidget(self.table_widget) + button_layout = QVBoxLayout() + button_layout.addWidget(self.add_btn) + button_layout.addWidget(self.remove_btn) + button_layout.addWidget(self.update_btn) + main_layout.addLayout(button_layout) + main_widget.setLayout(main_layout) + self.setCentralWidget(main_widget) + + self.membership_functions = [ + ["Низкая", "Треугольная", 10, 20, 30, None], + ["Средняя", "Трапециевидная", 15, 25, 35, 45], + ["Высокая", "Треугольная", 40, 50, 60, None], + ] + self.update_table() + self.update_plot() + + self.add_btn.clicked.connect(self.add_function) + self.remove_btn.clicked.connect(self.remove_function) + self.table_widget.cellChanged.connect(self.update_data) + self.update_btn.clicked.connect(self.update_plot) + + def update_data(self): + print(self.membership_functions) + for row in range(self.table_widget.rowCount()): + for column in range(6): + index = self.table_widget.model().index(row, column) + data = self.table_widget.model().data(index) + if column == 5: + if self.membership_functions[row][1] == 'Треугольная' and data != '': + self.membership_functions[row][1] = 'Трапециевидная' + elif self.membership_functions[row][column] == 'Трапециевидная' and data == '': + self.membership_functions[row][1] = 'Треугольная' + if data == '': + self.membership_functions[row][column] = None + continue + try: + self.membership_functions[row][column] = int(data) + except ValueError: + self.membership_functions[row][column] = data + print(self.membership_functions) + + def add_function(self): + print("чмо") + row_count = self.table_widget.rowCount() + self.table_widget.insertRow(row_count) + self.table_widget.setItem(row_count, 0, QTableWidgetItem("Новая функция")) + self.table_widget.setItem(row_count, 1, QTableWidgetItem("Треугольная")) + self.membership_functions.append(["Новая функция", "Треугольная", 0, 25, 50, None]) + self.update_table() + self.update_plot() + + def remove_function(self): + selected_rows = self.table_widget.selectionModel().selectedRows() + rows_to_remove = [index.row() for index in selected_rows] + rows_to_remove.sort(reverse=True) + for row in rows_to_remove: + self.table_widget.removeRow(row) + del self.membership_functions[row] + self.update_plot() + + def update_table(self): + self.table_widget.setRowCount(len(self.membership_functions)) + row = 0 + for (name, mf_type, a, b, c, d) in self.membership_functions: + self.table_widget.setItem(row, 0, QTableWidgetItem(name)) + self.table_widget.setItem(row, 1, QTableWidgetItem(mf_type)) + self.table_widget.setItem(row, 2, QTableWidgetItem(str(a))) + self.table_widget.setItem(row, 3, QTableWidgetItem(str(b))) + self.table_widget.setItem(row, 4, QTableWidgetItem(str(c))) + self.table_widget.setItem(row, 5, QTableWidgetItem(str(d) if d is not None else "")) + row += 1 + + def update_plot(self): + self.plot_widget.clear() + print('лох') + x = [-10, 110] + y = [0, 0] + self.plot_widget.plot(x, y) + for (name, mf_type, a, b, c, d) in self.membership_functions: + print(name, mf_type, a, b, c, d) + if mf_type == "Треугольная": + x = [a, b, c] + y = [0, 1, 0] + self.plot_widget.plot(x, y, name=name, pen=pg.mkPen(QColor(random.randint(0,255), random.randint(0,255), random.randint(0,255)), width=2)) + else: + x = [a, b, c, d] + y = [0, 1, 1, 0] + self.plot_widget.plot(x, y, name=name, pen=pg.mkPen(QColor(random.randint(0,255), random.randint(0,255), random.randint(0,255)), width=2)) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + fuzzy_scale_app = FuzzyScaleApp() + fuzzy_scale_app.show() + sys.exit(app.exec_())