diff --git a/.idea/misc.xml b/.idea/misc.xml index 2f44f69..3841772 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + diff --git a/.idea/stat.iml b/.idea/stat.iml index 7190cc6..8fe898a 100644 --- a/.idea/stat.iml +++ b/.idea/stat.iml @@ -2,7 +2,7 @@ - + diff --git a/.pylintrc b/.pylintrc index 9336cc4..c079ac4 100644 --- a/.pylintrc +++ b/.pylintrc @@ -24,4 +24,5 @@ disable= missing-docstring, too-many-public-methods, too-few-public-methods, - too-many-arguments + too-many-arguments, + broad-except diff --git a/statapp/main_window.py b/statapp/main_window.py index 4425a3f..620a9df 100644 --- a/statapp/main_window.py +++ b/statapp/main_window.py @@ -33,7 +33,7 @@ from statapp.about_window import AboutWindow from statapp.models.fileslc_model import FileSLCModel from statapp.polynoms.squared_polynom_window import SquaredPolynomWindow from statapp.ui.ui_main_window import Ui_MainWindow -from statapp.utils import buildMessageBox, addIcon, FloatDelegate +from statapp.utils import buildMessageBox, addIcon, FloatDelegate, onError from statapp.variance_analysis import VarianceAnalysisWindow from statapp.correlation_analysis import CorrelationAnalysisWindow from statapp.polynoms.transform_polynom_window import TransformPolynomWindow @@ -103,71 +103,86 @@ class MainWindow(QMainWindow): @Slot() def on_openfileaction_triggered(self): - currentData = self.model.getData() - data = np.array([]) - if currentData.size > 1: - file = '' - if self.fileModel.fileName: - file = '\nФайл сохранения: ' + self.fileModel.fileName + try: + currentData = self.model.getData() + data = np.array([]) + if currentData.size > 1: + file = '' + if self.fileModel.fileName: + file = '\nФайл сохранения: ' + self.fileModel.fileName - msgBox = buildMessageBox \ - ('Сохранение данных', - "Сохранить данные?" + file, - QMessageBox.Question, - QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel, - QMessageBox.Cancel) + msgBox = buildMessageBox \ + ('Сохранение данных', + "Сохранить данные?" + file, + QMessageBox.Question, + QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel, + QMessageBox.Cancel) - reply = msgBox.exec_() - if reply == QMessageBox.StandardButton.Yes: - self.fileModel.saveFile(self.model.getData()) + reply = msgBox.exec_() + if reply == QMessageBox.StandardButton.Yes: + self.fileModel.saveFile(self.model.getData()) - data = self.fileModel.loadFile() - if data is not None and data.shape[0] > 0: - self.model.updateAllData(data) - self.isDataChanged = False - elif reply == QMessageBox.StandardButton.Cancel: - return + data = self.fileModel.loadFile() + if data is not None and data.shape[0] > 0: + self.model.updateAllData(data) + self.isDataChanged = False + elif reply == QMessageBox.StandardButton.Cancel: + return + else: + data = self.fileModel.loadFile() + if data is not None and data.shape[0] > 0: + self.model.updateAllData(data) + self.isDataChanged = False else: data = self.fileModel.loadFile() if data is not None and data.shape[0] > 0: self.model.updateAllData(data) self.isDataChanged = False - else: - data = self.fileModel.loadFile() - if data is not None and data.shape[0] > 0: - self.model.updateAllData(data) - self.isDataChanged = False + except Exception as error: + onError(error) @Slot() def on_savefileaction_triggered(self): - self.isDataChanged = not self.fileModel.saveFile(self.model.getData()) + try: + self.isDataChanged = not self.fileModel.saveFile(self.model.getData()) + except Exception as error: + onError(error) @Slot() def on_closefileaction_triggered(self): - self.fileModel.closeFile() - self.isDataChanged = False + try: + self.fileModel.closeFile() + self.isDataChanged = False + except Exception as error: + onError(error) @Slot() def on_generateYaction_triggered(self): - gw = GenerateWindow() + try: + gw = GenerateWindow() - if gw.exec(): - y = generateYValues(gw.mat, gw.deviation, gw.count) - self.model.updateAllData(y.round(NUMBERS_PRECISION)) - self.isDataChanged = True + if gw.exec(): + y = generateYValues(gw.mat, gw.deviation, gw.count) + self.model.updateAllData(y.round(NUMBERS_PRECISION)) + self.isDataChanged = True + except Exception as error: + onError(error) @Slot() def on_generateXaction_triggered(self): - gfw = GenerateFactorWindow() + try: + gfw = GenerateFactorWindow() - if gfw.exec(): - data = self.model.getData() - y = self.model.getY() - xValues = generateXValues(gfw.mat, gfw.deviation, gfw.typeConnection, y) - data = np.concatenate((data, xValues.round(NUMBERS_PRECISION)), axis=1) - self.model.updateAllData(data) - self.isDataChanged = True + if gfw.exec(): + data = self.model.getData() + y = self.model.getY() + xValues = generateXValues(gfw.mat, gfw.deviation, gfw.typeConnection, y) + data = np.concatenate((data, xValues.round(NUMBERS_PRECISION)), axis=1) + self.model.updateAllData(data) + self.isDataChanged = True + except Exception as error: + onError(error) @Slot() def on_aboutmenuaction_triggered(self): @@ -176,28 +191,43 @@ class MainWindow(QMainWindow): @Slot() def on_varianceAnalysisAction_triggered(self): - dw = VarianceAnalysisWindow(self.model.getData()) - dw.exec() + try: + dw = VarianceAnalysisWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) @Slot() def on_correlationAnalisisAction_triggered(self): - dw = CorrelationAnalysisWindow(self.model.getData()) - dw.exec() + try: + dw = CorrelationAnalysisWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) @Slot() def on_linearPolynomAction_triggered(self): - dw = LinearPolynomWindow(self.model.getData()) - dw.exec() + try: + dw = LinearPolynomWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) @Slot() def on_squaredPolynomAction_triggered(self): - dw = SquaredPolynomWindow(self.model.getData()) - dw.exec() + try: + dw = SquaredPolynomWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) @Slot() def on_transformPolynomAction_triggered(self): - dw = TransformPolynomWindow(self.model.getData()) - dw.exec() + try: + dw = TransformPolynomWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) def closeEvent(self, event): if self.isDataChanged: diff --git a/statapp/polynoms/transform_polynom_window.py b/statapp/polynoms/transform_polynom_window.py index e72b0b0..16fa408 100644 --- a/statapp/polynoms/transform_polynom_window.py +++ b/statapp/polynoms/transform_polynom_window.py @@ -28,7 +28,7 @@ from statapp.models.prediction_table_model import PreditionTableModel from statapp.models.transform_polynom_model import TransformPolynomModel, TRANSFORMS from statapp.polynoms.polynom_window import MplCanvas from statapp.ui.ui_polynom_window import Ui_PolynomWindow -from statapp.utils import addIcon +from statapp.utils import addIcon, onError class TransformPolynomWindow(QDialog): @@ -41,8 +41,11 @@ class TransformPolynomWindow(QDialog): self.data = data result = linearPolynom(data) + try: + predictionResult = prediction(data, result) + except Exception as error: + onError(error) - predictionResult = prediction(data, result) self.predictionModel = PreditionTableModel(predictionResult) self.ui.predictionTableView.setModel(self.predictionModel) header = self.ui.predictionTableView.horizontalHeader() @@ -90,7 +93,10 @@ class TransformPolynomWindow(QDialog): tr = self.model.data(self.model.createIndex(j, 0), Qt.DisplayRole) data[i][j] = TRANSFORMS[tr](data[i][j]) - self.rebuildData(data) + try: + self.rebuildData(data) + except Exception as error: + onError(error) def rebuildData(self, data): result = linearPolynom(data) diff --git a/statapp/utils.py b/statapp/utils.py index 463767d..4e8b1b5 100644 --- a/statapp/utils.py +++ b/statapp/utils.py @@ -59,8 +59,19 @@ def buildMessageBox(title, text, icon, buttons, defaultButton): msgBox.setStandardButtons(buttons) msgBox.setDefaultButton(defaultButton) + addIcon(msgBox) + return msgBox +def onError(errorName: Exception): + msgBox = buildMessageBox \ + ('Ошибка', + "Упс.. Произошла ошибка:\n" + str(errorName), + QMessageBox.Critical, + QMessageBox.Ok, + QMessageBox.Ok) + + msgBox.exec_() class FloatDelegate(QStyledItemDelegate): def __init__(self, parent=None):