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):