From 981580f46d55b949af440973660a5b9b946827bd Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Sun, 11 Feb 2024 21:09:52 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20"=D0=A0=D0=B0=D1=81=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F"=20(#116)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #110 Closes #111 Closes #112 --- environment.yml | 1 - statapp/distribution_window.py | 86 ++++++++ statapp/main_window.py | 26 +++ statapp/polynoms/polynom_window.py | 4 - statapp/polynoms/transform_polynom_window.py | 1 - statapp/ui/generate_factor_window.ui | 9 - statapp/ui/main_window.ui | 26 ++- statapp/ui/ui_generate_factor_window.py | 131 +++++------- statapp/ui/ui_main_window.py | 213 +++++++++---------- 9 files changed, 285 insertions(+), 212 deletions(-) create mode 100644 statapp/distribution_window.py diff --git a/environment.yml b/environment.yml index 176cbb8..95ffcea 100644 --- a/environment.yml +++ b/environment.yml @@ -144,7 +144,6 @@ dependencies: - pyyaml==6.0.1 - setuptools-scm==8.0.4 - six==1.16.0 - - statapp==0.10.2 - sympy==1.12 - tomli==2.0.1 - tomlkit==0.12.1 diff --git a/statapp/distribution_window.py b/statapp/distribution_window.py new file mode 100644 index 0000000..b9f60b9 --- /dev/null +++ b/statapp/distribution_window.py @@ -0,0 +1,86 @@ +import numpy as np +from PySide2.QtWidgets import QDialog, QVBoxLayout, QComboBox + +from statapp.polynoms.polynom_window import MplCanvas +from statapp.utils import addIcon +from statapp.models.utils import yxHeader + + +class DistributionWindow(QDialog): + def __init__(self, title: str, data: np.ndarray): + super().__init__() + self.setWindowTitle(title) + addIcon(self) + + self.layout = QVBoxLayout() + self.setLayout(self.layout) + + self.data = data + self.values = yxHeader(data.shape[1]) + + self.comboBox = QComboBox() + self.comboBox.addItems(self.values) + self.comboBox.currentIndexChanged.connect(self.onChange) + self.sc = self.getSc(data[:, 0]) + self.layout.addWidget(self.comboBox) + + self.l = QVBoxLayout() + self.l.addWidget(self.sc) + self.layout.addLayout(self.l) + + + def onChange(self): + while ((child := self.l.takeAt(0)) != None): + child.widget().deleteLater() + self.sc = self.getSc(self.data[:, self.comboBox.currentIndex()]) + self.l.addWidget(self.sc) + + +class UniformDistributionWindow(DistributionWindow): + def __init__(self, data: np.array): + super().__init__("Равномерное распределение", data) + + def getSc(self, points): + sc = MplCanvas(self, width=5, height=4, dpi=100) + points = np.sort(points) + points = np.array( + [points[0]] + + [pt for pt, next_pt in zip(points[:-1], points[1:]) if pt != next_pt] + ) + differences = np.diff(points) + inverseDifferences = 1 / differences + for i, (start, end) in enumerate(zip(points[:-1], points[1:])): + sc.axes.hlines(inverseDifferences[i], start, end, colors='r', linestyles='solid') + return sc + + +def normalDensity(x, mu, sigmaSquared): + return 1 / np.sqrt(2 * np.pi * sigmaSquared) * np.exp(-(x - mu) ** 2 / (2 * sigmaSquared)) + + +class NormalDistributionWindow(DistributionWindow): + def __init__(self, data: np.array): + super().__init__("Нормальное распределение", data) + + def getSc(self, points): + sc = MplCanvas(self, width=5, height=4, dpi=100) + points = np.sort(points) + mu = np.mean(points) + sigmaSquared = np.var(points) + yValues = normalDensity(points, mu, sigmaSquared) + sc.axes.plot(points, yValues) + return sc + + +class ExponentialDistributionWindow(DistributionWindow): + def __init__(self, data: np.array): + super().__init__("Экспоненциальное распределение", data) + + def getSc(self, points): + sc = MplCanvas(self, width=5, height=4, dpi=100) + points = np.sort(points) + mu = np.mean(points) + lambdaParam = 1 / mu + yValues = lambdaParam * np.exp(-lambdaParam * points) + sc.axes.plot(points, yValues) + return sc diff --git a/statapp/main_window.py b/statapp/main_window.py index 594484b..0065b44 100644 --- a/statapp/main_window.py +++ b/statapp/main_window.py @@ -24,6 +24,8 @@ from PySide2.QtWidgets import QMainWindow, QMessageBox, QAction, QMenu from statapp.calculations import generateXValues, generateYValues from statapp.constants import NUMBERS_PRECISION +from statapp.distribution_window import NormalDistributionWindow, UniformDistributionWindow, \ + ExponentialDistributionWindow from statapp.generate_factor_window import GenerateFactorWindow from statapp.polynoms.linear_polynom_window import LinearPolynomWindow from statapp.mathtex_header_view import MathTexHeaderView @@ -257,6 +259,30 @@ class MainWindow(QMainWindow): except Exception as error: onError(error) + @Slot() + def on_uniformDistributionAction_triggered(self): + try: + dw = UniformDistributionWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) + + @Slot() + def on_normalDistributionAction_triggered(self): + try: + dw = NormalDistributionWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) + + @Slot() + def on_exponentialDistributionAction_triggered(self): + try: + dw = ExponentialDistributionWindow(self.model.getData()) + dw.exec() + except Exception as error: + onError(error) + def closeEvent(self, event): if self.isDataChanged: file = '' diff --git a/statapp/polynoms/polynom_window.py b/statapp/polynoms/polynom_window.py index d8da55d..e607088 100644 --- a/statapp/polynoms/polynom_window.py +++ b/statapp/polynoms/polynom_window.py @@ -74,10 +74,6 @@ class PolynomWindow(QDialog): realY = predictionResult[:, 0] calculatedY = predictionResult[:, 1] - print(xAxes) - print(realY) - print(calculatedY) - sc.axes.scatter(xAxes, realY) # xnew = np.linspace(xAxes.min(), xAxes.max(), 300) diff --git a/statapp/polynoms/transform_polynom_window.py b/statapp/polynoms/transform_polynom_window.py index 16fa408..38b6f46 100644 --- a/statapp/polynoms/transform_polynom_window.py +++ b/statapp/polynoms/transform_polynom_window.py @@ -87,7 +87,6 @@ class TransformPolynomWindow(QDialog): def on_data_changed(self): data = np.copy(self.data) - print(len(data[0:])) for i in range(len(data[0:])): for j in range(1, len(data[i])): tr = self.model.data(self.model.createIndex(j, 0), Qt.DisplayRole) diff --git a/statapp/ui/generate_factor_window.ui b/statapp/ui/generate_factor_window.ui index 75155b9..7a62f6b 100644 --- a/statapp/ui/generate_factor_window.ui +++ b/statapp/ui/generate_factor_window.ui @@ -101,15 +101,6 @@ 12 - - false - - - - - - - diff --git a/statapp/ui/main_window.ui b/statapp/ui/main_window.ui index 0aa4851..a3a3511 100644 --- a/statapp/ui/main_window.ui +++ b/statapp/ui/main_window.ui @@ -40,7 +40,7 @@ 0 0 800 - 22 + 29 @@ -80,10 +80,19 @@ + + + Распределения + + + + + + @@ -147,6 +156,21 @@ Использование + + + Равномерное + + + + + Нормальное + + + + + Экспоненциальное + + diff --git a/statapp/ui/ui_generate_factor_window.py b/statapp/ui/ui_generate_factor_window.py index cc6a141..979e514 100644 --- a/statapp/ui/ui_generate_factor_window.py +++ b/statapp/ui/ui_generate_factor_window.py @@ -1,111 +1,78 @@ # -*- coding: utf-8 -*- -# -# Copyright (c) 2024 Maxim Slipenko, Eugene Lazurenko. -# -# This file is part of Statapp -# (see https://github.com/shizand/statapp). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# +# Form implementation generated from reading ui file 'statapp/ui/generate_factor_window.ui', +# licensing of 'statapp/ui/generate_factor_window.ui' applies. +# +# Created: Sun Feb 11 18:12:25 2024 +# by: pyside2-uic running on PySide2 5.13.2 +# +# WARNING! All changes made in this file will be lost! -################################################################################ -## Form generated from reading UI file 'generate_factor_window.ui' -## -## Created by: Qt User Interface Compiler version 5.15.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * - +from PySide2 import QtCore, QtGui, QtWidgets class Ui_GenerateFactorWindow(object): def setupUi(self, GenerateFactorWindow): - if not GenerateFactorWindow.objectName(): - GenerateFactorWindow.setObjectName(u"GenerateFactorWindow") + GenerateFactorWindow.setObjectName("GenerateFactorWindow") GenerateFactorWindow.resize(503, 193) - self.gridLayout_2 = QGridLayout(GenerateFactorWindow) - self.gridLayout_2.setObjectName(u"gridLayout_2") - self.gridLayout = QGridLayout() - self.gridLayout.setObjectName(u"gridLayout") - self.label = QLabel(GenerateFactorWindow) - self.label.setObjectName(u"label") - font = QFont() + self.gridLayout_2 = QtWidgets.QGridLayout(GenerateFactorWindow) + self.gridLayout_2.setObjectName("gridLayout_2") + self.gridLayout = QtWidgets.QGridLayout() + self.gridLayout.setObjectName("gridLayout") + self.label = QtWidgets.QLabel(GenerateFactorWindow) + font = QtGui.QFont() font.setPointSize(12) self.label.setFont(font) - + self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - - self.label_3 = QLabel(GenerateFactorWindow) - self.label_3.setObjectName(u"label_3") + self.label_3 = QtWidgets.QLabel(GenerateFactorWindow) + font = QtGui.QFont() + font.setPointSize(12) self.label_3.setFont(font) - + self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1) - - self.generatePushButton = QPushButton(GenerateFactorWindow) - self.generatePushButton.setObjectName(u"generatePushButton") + self.generatePushButton = QtWidgets.QPushButton(GenerateFactorWindow) + font = QtGui.QFont() + font.setPointSize(12) self.generatePushButton.setFont(font) - + self.generatePushButton.setObjectName("generatePushButton") self.gridLayout.addWidget(self.generatePushButton, 3, 0, 1, 2) - - self.label_2 = QLabel(GenerateFactorWindow) - self.label_2.setObjectName(u"label_2") + self.label_2 = QtWidgets.QLabel(GenerateFactorWindow) + font = QtGui.QFont() + font.setPointSize(12) self.label_2.setFont(font) - + self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) - - self.matSpinBox = QDoubleSpinBox(GenerateFactorWindow) - self.matSpinBox.setObjectName(u"matSpinBox") + self.matSpinBox = QtWidgets.QDoubleSpinBox(GenerateFactorWindow) + font = QtGui.QFont() + font.setPointSize(12) self.matSpinBox.setFont(font) self.matSpinBox.setDecimals(5) - self.matSpinBox.setMaximum(1000000.000000000000000) - + self.matSpinBox.setMaximum(1000000.0) + self.matSpinBox.setObjectName("matSpinBox") self.gridLayout.addWidget(self.matSpinBox, 1, 1, 1, 1) - - self.deviationSpinBox = QDoubleSpinBox(GenerateFactorWindow) - self.deviationSpinBox.setObjectName(u"deviationSpinBox") + self.deviationSpinBox = QtWidgets.QDoubleSpinBox(GenerateFactorWindow) + font = QtGui.QFont() + font.setPointSize(12) self.deviationSpinBox.setFont(font) self.deviationSpinBox.setDecimals(5) - self.deviationSpinBox.setMaximum(1000000.000000000000000) - + self.deviationSpinBox.setMaximum(1000000.0) + self.deviationSpinBox.setObjectName("deviationSpinBox") self.gridLayout.addWidget(self.deviationSpinBox, 2, 1, 1, 1) - - self.typeComboBox = QComboBox(GenerateFactorWindow) - self.typeComboBox.setObjectName(u"typeComboBox") + self.typeComboBox = QtWidgets.QComboBox(GenerateFactorWindow) + font = QtGui.QFont() + font.setPointSize(12) self.typeComboBox.setFont(font) - self.typeComboBox.setEditable(False) - + self.typeComboBox.setObjectName("typeComboBox") self.gridLayout.addWidget(self.typeComboBox, 0, 1, 1, 1) - - self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) - self.retranslateUi(GenerateFactorWindow) - - QMetaObject.connectSlotsByName(GenerateFactorWindow) - # setupUi + QtCore.QMetaObject.connectSlotsByName(GenerateFactorWindow) def retranslateUi(self, GenerateFactorWindow): - GenerateFactorWindow.setWindowTitle(QCoreApplication.translate("GenerateFactorWindow", u"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432", None)) - self.label.setText(QCoreApplication.translate("GenerateFactorWindow", u"\u0422\u0438\u043f \u0441\u0432\u044f\u0437\u0438", None)) - self.label_3.setText(QCoreApplication.translate("GenerateFactorWindow", u"\u0421\u0440\u0435\u0434\u043d\u0435\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435", None)) - self.generatePushButton.setText(QCoreApplication.translate("GenerateFactorWindow", u"\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c", None)) - self.label_2.setText(QCoreApplication.translate("GenerateFactorWindow", u"\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435", None)) - self.typeComboBox.setCurrentText("") - self.typeComboBox.setPlaceholderText("") - # retranslateUi + GenerateFactorWindow.setWindowTitle(QtWidgets.QApplication.translate("GenerateFactorWindow", "Генерация факторов", None, -1)) + self.label.setText(QtWidgets.QApplication.translate("GenerateFactorWindow", "Тип связи", None, -1)) + self.label_3.setText(QtWidgets.QApplication.translate("GenerateFactorWindow", "Среднеквадратичное отклонение", None, -1)) + self.generatePushButton.setText(QtWidgets.QApplication.translate("GenerateFactorWindow", "Сгенерировать", None, -1)) + self.label_2.setText(QtWidgets.QApplication.translate("GenerateFactorWindow", "Математическое ожидание", None, -1)) + diff --git a/statapp/ui/ui_main_window.py b/statapp/ui/ui_main_window.py index 853a830..ba00db3 100644 --- a/statapp/ui/ui_main_window.py +++ b/statapp/ui/ui_main_window.py @@ -1,107 +1,81 @@ # -*- coding: utf-8 -*- -# -# Copyright (c) 2024 Maxim Slipenko, Eugene Lazurenko. -# -# This file is part of Statapp -# (see https://github.com/shizand/statapp). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# +# Form implementation generated from reading ui file 'statapp/ui/main_window.ui', +# licensing of 'statapp/ui/main_window.ui' applies. +# +# Created: Sun Feb 11 18:12:22 2024 +# by: pyside2-uic running on PySide2 5.13.2 +# +# WARNING! All changes made in this file will be lost! -################################################################################ -## Form generated from reading UI file 'main_window.ui' -## -## Created by: Qt User Interface Compiler version 5.15.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide2.QtCore import * -from PySide2.QtGui import * -from PySide2.QtWidgets import * - +from PySide2 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): - if not MainWindow.objectName(): - MainWindow.setObjectName(u"MainWindow") + MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) - self.aboutmenuaction = QAction(MainWindow) - self.aboutmenuaction.setObjectName(u"aboutmenuaction") - self.generateYaction = QAction(MainWindow) - self.generateYaction.setObjectName(u"generateYaction") - self.generateXaction = QAction(MainWindow) - self.generateXaction.setObjectName(u"generateXaction") - self.openfileaction = QAction(MainWindow) - self.openfileaction.setObjectName(u"openfileaction") - self.savefileaction = QAction(MainWindow) - self.savefileaction.setObjectName(u"savefileaction") - self.closefileaction = QAction(MainWindow) - self.closefileaction.setObjectName(u"closefileaction") - self.varianceAnalysisAction = QAction(MainWindow) - self.varianceAnalysisAction.setObjectName(u"varianceAnalysisAction") - self.correlationAnalisisAction = QAction(MainWindow) - self.correlationAnalisisAction.setObjectName(u"correlationAnalisisAction") - self.linearPolynomAction = QAction(MainWindow) - self.linearPolynomAction.setObjectName(u"linearPolynomAction") - self.squaredPolynomAction = QAction(MainWindow) - self.squaredPolynomAction.setObjectName(u"squaredPolynomAction") - self.transformPolynomAction = QAction(MainWindow) - self.transformPolynomAction.setObjectName(u"transformPolynomAction") - self.usageaction = QAction(MainWindow) - self.usageaction.setObjectName(u"usageaction") - self.centralwidget = QWidget(MainWindow) - self.centralwidget.setObjectName(u"centralwidget") - self.gridLayout = QGridLayout(self.centralwidget) - self.gridLayout.setObjectName(u"gridLayout") - self.label = QLabel(self.centralwidget) - self.label.setObjectName(u"label") - self.label.setAlignment(Qt.AlignCenter) - + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) + self.gridLayout.setObjectName("gridLayout") + self.label = QtWidgets.QLabel(self.centralwidget) + self.label.setAlignment(QtCore.Qt.AlignCenter) + self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - - self.tableView = QTableView(self.centralwidget) - self.tableView.setObjectName(u"tableView") + self.tableView = QtWidgets.QTableView(self.centralwidget) + self.tableView.setObjectName("tableView") self.tableView.verticalHeader().setVisible(False) - self.gridLayout.addWidget(self.tableView, 1, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QMenuBar(MainWindow) - self.menubar.setObjectName(u"menubar") - self.menubar.setGeometry(QRect(0, 0, 800, 22)) - self.filemenu = QMenu(self.menubar) - self.filemenu.setObjectName(u"filemenu") - self.generatemenu = QMenu(self.menubar) - self.generatemenu.setObjectName(u"generatemenu") - self.analyzemenu = QMenu(self.menubar) - self.analyzemenu.setObjectName(u"analyzemenu") - self.modelmenu = QMenu(self.menubar) - self.modelmenu.setObjectName(u"modelmenu") - self.helpmenu = QMenu(self.menubar) - self.helpmenu.setObjectName(u"helpmenu") + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 29)) + self.menubar.setObjectName("menubar") + self.filemenu = QtWidgets.QMenu(self.menubar) + self.filemenu.setObjectName("filemenu") + self.generatemenu = QtWidgets.QMenu(self.menubar) + self.generatemenu.setObjectName("generatemenu") + self.analyzemenu = QtWidgets.QMenu(self.menubar) + self.analyzemenu.setObjectName("analyzemenu") + self.modelmenu = QtWidgets.QMenu(self.menubar) + self.modelmenu.setObjectName("modelmenu") + self.helpmenu = QtWidgets.QMenu(self.menubar) + self.helpmenu.setObjectName("helpmenu") + self.menu = QtWidgets.QMenu(self.menubar) + self.menu.setObjectName("menu") MainWindow.setMenuBar(self.menubar) - self.statusbar = QStatusBar(MainWindow) - self.statusbar.setObjectName(u"statusbar") + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) - - self.menubar.addAction(self.filemenu.menuAction()) - self.menubar.addAction(self.generatemenu.menuAction()) - self.menubar.addAction(self.analyzemenu.menuAction()) - self.menubar.addAction(self.modelmenu.menuAction()) - self.menubar.addAction(self.helpmenu.menuAction()) + self.aboutmenuaction = QtWidgets.QAction(MainWindow) + self.aboutmenuaction.setObjectName("aboutmenuaction") + self.generateYaction = QtWidgets.QAction(MainWindow) + self.generateYaction.setObjectName("generateYaction") + self.generateXaction = QtWidgets.QAction(MainWindow) + self.generateXaction.setObjectName("generateXaction") + self.openfileaction = QtWidgets.QAction(MainWindow) + self.openfileaction.setObjectName("openfileaction") + self.savefileaction = QtWidgets.QAction(MainWindow) + self.savefileaction.setObjectName("savefileaction") + self.closefileaction = QtWidgets.QAction(MainWindow) + self.closefileaction.setObjectName("closefileaction") + self.varianceAnalysisAction = QtWidgets.QAction(MainWindow) + self.varianceAnalysisAction.setObjectName("varianceAnalysisAction") + self.correlationAnalisisAction = QtWidgets.QAction(MainWindow) + self.correlationAnalisisAction.setObjectName("correlationAnalisisAction") + self.linearPolynomAction = QtWidgets.QAction(MainWindow) + self.linearPolynomAction.setObjectName("linearPolynomAction") + self.squaredPolynomAction = QtWidgets.QAction(MainWindow) + self.squaredPolynomAction.setObjectName("squaredPolynomAction") + self.transformPolynomAction = QtWidgets.QAction(MainWindow) + self.transformPolynomAction.setObjectName("transformPolynomAction") + self.usageaction = QtWidgets.QAction(MainWindow) + self.usageaction.setObjectName("usageaction") + self.uniformDistributionAction = QtWidgets.QAction(MainWindow) + self.uniformDistributionAction.setObjectName("uniformDistributionAction") + self.normalDistributionAction = QtWidgets.QAction(MainWindow) + self.normalDistributionAction.setObjectName("normalDistributionAction") + self.exponentialDistributionAction = QtWidgets.QAction(MainWindow) + self.exponentialDistributionAction.setObjectName("exponentialDistributionAction") self.filemenu.addAction(self.openfileaction) self.filemenu.addAction(self.savefileaction) self.filemenu.addAction(self.closefileaction) @@ -114,30 +88,41 @@ class Ui_MainWindow(object): self.modelmenu.addAction(self.transformPolynomAction) self.helpmenu.addAction(self.usageaction) self.helpmenu.addAction(self.aboutmenuaction) + self.menu.addAction(self.uniformDistributionAction) + self.menu.addAction(self.normalDistributionAction) + self.menu.addAction(self.exponentialDistributionAction) + self.menubar.addAction(self.filemenu.menuAction()) + self.menubar.addAction(self.generatemenu.menuAction()) + self.menubar.addAction(self.analyzemenu.menuAction()) + self.menubar.addAction(self.modelmenu.menuAction()) + self.menubar.addAction(self.menu.menuAction()) + self.menubar.addAction(self.helpmenu.menuAction()) self.retranslateUi(MainWindow) - - QMetaObject.connectSlotsByName(MainWindow) - # setupUi + QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", None)) - self.aboutmenuaction.setText(QCoreApplication.translate("MainWindow", u"\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435", None)) - self.generateYaction.setText(QCoreApplication.translate("MainWindow", u"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043e\u0442\u043a\u043b\u0438\u043a\u0430", None)) - self.generateXaction.setText(QCoreApplication.translate("MainWindow", u"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0444\u0430\u043a\u0442\u043e\u0440\u0430", None)) - self.openfileaction.setText(QCoreApplication.translate("MainWindow", u"\u041e\u0442\u043a\u0440\u044b\u0442\u044c", None)) - self.savefileaction.setText(QCoreApplication.translate("MainWindow", u"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c", None)) - self.closefileaction.setText(QCoreApplication.translate("MainWindow", u"\u0417\u0430\u043a\u0440\u044b\u0442\u044c", None)) - self.varianceAnalysisAction.setText(QCoreApplication.translate("MainWindow", u"\u0414\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None)) - self.correlationAnalisisAction.setText(QCoreApplication.translate("MainWindow", u"\u041a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None)) - self.linearPolynomAction.setText(QCoreApplication.translate("MainWindow", u"\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c", None)) - self.squaredPolynomAction.setText(QCoreApplication.translate("MainWindow", u"\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c", None)) - self.transformPolynomAction.setText(QCoreApplication.translate("MainWindow", u"\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f", None)) - self.usageaction.setText(QCoreApplication.translate("MainWindow", u"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435", None)) - self.label.setText(QCoreApplication.translate("MainWindow", u"\u0421\u0422\u0410\u0422\u0418\u0421\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u0414\u0410\u041d\u041d\u042b\u0415", None)) - self.filemenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0424\u0430\u0439\u043b", None)) - self.generatemenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439", None)) - self.analyzemenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445", None)) - self.modelmenu.setTitle(QCoreApplication.translate("MainWindow", u"\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", None)) - self.helpmenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0421\u043f\u0440\u0430\u0432\u043a\u0430", None)) - # retranslateUi + MainWindow.setWindowTitle(QtWidgets.QApplication.translate("MainWindow", "Статистическое моделирование", None, -1)) + self.label.setText(QtWidgets.QApplication.translate("MainWindow", "СТАТИСТИЧЕСКИЕ ДАННЫЕ", None, -1)) + self.filemenu.setTitle(QtWidgets.QApplication.translate("MainWindow", "Файл", None, -1)) + self.generatemenu.setTitle(QtWidgets.QApplication.translate("MainWindow", "Генерация показателей", None, -1)) + self.analyzemenu.setTitle(QtWidgets.QApplication.translate("MainWindow", "Анализ данных", None, -1)) + self.modelmenu.setTitle(QtWidgets.QApplication.translate("MainWindow", "Моделирование", None, -1)) + self.helpmenu.setTitle(QtWidgets.QApplication.translate("MainWindow", "Справка", None, -1)) + self.menu.setTitle(QtWidgets.QApplication.translate("MainWindow", "Распределения", None, -1)) + self.aboutmenuaction.setText(QtWidgets.QApplication.translate("MainWindow", "О программе", None, -1)) + self.generateYaction.setText(QtWidgets.QApplication.translate("MainWindow", "Генерация отклика", None, -1)) + self.generateXaction.setText(QtWidgets.QApplication.translate("MainWindow", "Генерация фактора", None, -1)) + self.openfileaction.setText(QtWidgets.QApplication.translate("MainWindow", "Открыть", None, -1)) + self.savefileaction.setText(QtWidgets.QApplication.translate("MainWindow", "Сохранить", None, -1)) + self.closefileaction.setText(QtWidgets.QApplication.translate("MainWindow", "Закрыть", None, -1)) + self.varianceAnalysisAction.setText(QtWidgets.QApplication.translate("MainWindow", "Дисперсионный анализ", None, -1)) + self.correlationAnalisisAction.setText(QtWidgets.QApplication.translate("MainWindow", "Корреляционный анализ", None, -1)) + self.linearPolynomAction.setText(QtWidgets.QApplication.translate("MainWindow", "Линейный полином", None, -1)) + self.squaredPolynomAction.setText(QtWidgets.QApplication.translate("MainWindow", "Квадратичный полином", None, -1)) + self.transformPolynomAction.setText(QtWidgets.QApplication.translate("MainWindow", "Преобразования", None, -1)) + self.usageaction.setText(QtWidgets.QApplication.translate("MainWindow", "Использование", None, -1)) + self.uniformDistributionAction.setText(QtWidgets.QApplication.translate("MainWindow", "Равномерное", None, -1)) + self.normalDistributionAction.setText(QtWidgets.QApplication.translate("MainWindow", "Нормальное", None, -1)) + self.exponentialDistributionAction.setText(QtWidgets.QApplication.translate("MainWindow", "Экспоненциальное", None, -1)) +