добавлена генерация отклика

This commit is contained in:
Maxim Slipenko 2023-09-26 16:47:47 +03:00
parent 8682ba0be2
commit b8c6b0f7df
7 changed files with 233 additions and 6 deletions

View File

@ -0,0 +1,24 @@
from PySide6.QtCore import Slot
from PySide6.QtGui import QIntValidator
from PySide6.QtWidgets import QDialog
from statapp.ui.ui_generate_window import Ui_GenerateWindow
class GenerateWindow(QDialog):
def __init__(self):
super().__init__()
self.deviation = None
self.mat = None
self.count = None
self.ui = Ui_GenerateWindow()
self.ui.setupUi(self)
@Slot()
def on_generatePushButton_clicked(self):
self.count = self.ui.countSpinBox.value()
self.mat = self.ui.matSpinBox.value()
self.deviation = self.ui.deviationSpinBox.value()
self.accept()

View File

@ -1,5 +1,8 @@
import numpy as np
from PySide6.QtCore import Slot
from PySide6.QtWidgets import QMainWindow
from statapp.generate_window import GenerateWindow
from statapp.models.data_model import DataModel
from statapp.ui.ui_main_window import Ui_MainWindow
@ -12,3 +15,12 @@ class MainWindow(QMainWindow):
self.model = DataModel()
self.ui.tableView.setModel(self.model)
@Slot()
def on_generateYaction_triggered(self):
gw = GenerateWindow()
if gw.exec():
y = np.random.normal(gw.mat, gw.deviation, size=(gw.count, 1))
# self.model._data = y
self.model.updateAllData(y)

View File

@ -4,11 +4,16 @@ from PySide6.QtCore import Qt
class DataModel(QtCore.QAbstractTableModel):
def __init__(self, data=np.array([[1, 2, 3], [4, 5, 6]])):
def __init__(self, data=np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)):
super().__init__()
self._data = data
def updateAllData(self, data):
self.layoutAboutToBeChanged.emit()
self._data = data
self.layoutChanged.emit()
def rowCount(self, index):
return self._data.shape[0]
@ -32,7 +37,7 @@ class DataModel(QtCore.QAbstractTableModel):
def setData(self, index, value, role):
if role == Qt.EditRole:
try:
value = int(value)
value = float(value)
except ValueError:
return False
self._data[index.row(), index.column()] = value
@ -40,7 +45,8 @@ class DataModel(QtCore.QAbstractTableModel):
return False
def data(self, index, role):
if role == Qt.DisplayRole:
return int(self._data[index.row(), index.column()])
if role == Qt.DisplayRole or role == Qt.EditRole:
# ?
return float(self._data[index.row(), index.column()])
return None

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GenerateWindow</class>
<widget class="QDialog" name="GenerateWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>503</width>
<height>381</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0" colspan="2">
<widget class="QPushButton" name="generatePushButton">
<property name="text">
<string>Сгенерировать</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Математическое ожидание</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Среднеквадратичное отклонение</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="matSpinBox"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Количество наблюдений</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="countSpinBox">
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="deviationSpinBox"/>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
<tabstop>countSpinBox</tabstop>
<tabstop>matSpinBox</tabstop>
<tabstop>deviationSpinBox</tabstop>
<tabstop>generatePushButton</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View File

@ -40,7 +40,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>27</height>
<height>19</height>
</rect>
</property>
<widget class="QMenu" name="filemenu">
@ -52,6 +52,8 @@
<property name="title">
<string>Генерация показателей</string>
</property>
<addaction name="generateYaction"/>
<addaction name="generateXaction"/>
</widget>
<widget class="QMenu" name="analyzemenu">
<property name="title">
@ -81,6 +83,16 @@
<string>О программе</string>
</property>
</action>
<action name="generateYaction">
<property name="text">
<string>Генерация отклика</string>
</property>
</action>
<action name="generateXaction">
<property name="text">
<string>Генерация фактора</string>
</property>
</action>
</widget>
<resources/>
<connections/>

88
statapp/ui/ui_generate_window.py generated Normal file
View File

@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'generate_window.ui'
##
## Created by: Qt User Interface Compiler version 6.5.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QDialog, QDoubleSpinBox, QGridLayout,
QLabel, QPushButton, QSizePolicy, QSpinBox,
QWidget)
class Ui_GenerateWindow(object):
def setupUi(self, GenerateWindow):
if not GenerateWindow.objectName():
GenerateWindow.setObjectName(u"GenerateWindow")
GenerateWindow.resize(503, 381)
font = QFont()
font.setPointSize(12)
GenerateWindow.setFont(font)
self.gridLayout_2 = QGridLayout(GenerateWindow)
self.gridLayout_2.setObjectName(u"gridLayout_2")
self.gridLayout = QGridLayout()
self.gridLayout.setObjectName(u"gridLayout")
self.generatePushButton = QPushButton(GenerateWindow)
self.generatePushButton.setObjectName(u"generatePushButton")
self.gridLayout.addWidget(self.generatePushButton, 3, 0, 1, 2)
self.label_2 = QLabel(GenerateWindow)
self.label_2.setObjectName(u"label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.label_3 = QLabel(GenerateWindow)
self.label_3.setObjectName(u"label_3")
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.matSpinBox = QDoubleSpinBox(GenerateWindow)
self.matSpinBox.setObjectName(u"matSpinBox")
self.gridLayout.addWidget(self.matSpinBox, 1, 1, 1, 1)
self.label = QLabel(GenerateWindow)
self.label.setObjectName(u"label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.countSpinBox = QSpinBox(GenerateWindow)
self.countSpinBox.setObjectName(u"countSpinBox")
self.countSpinBox.setMinimum(1)
self.gridLayout.addWidget(self.countSpinBox, 0, 1, 1, 1)
self.deviationSpinBox = QDoubleSpinBox(GenerateWindow)
self.deviationSpinBox.setObjectName(u"deviationSpinBox")
self.gridLayout.addWidget(self.deviationSpinBox, 2, 1, 1, 1)
self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
QWidget.setTabOrder(self.countSpinBox, self.matSpinBox)
QWidget.setTabOrder(self.matSpinBox, self.deviationSpinBox)
QWidget.setTabOrder(self.deviationSpinBox, self.generatePushButton)
self.retranslateUi(GenerateWindow)
QMetaObject.connectSlotsByName(GenerateWindow)
# setupUi
def retranslateUi(self, GenerateWindow):
GenerateWindow.setWindowTitle(QCoreApplication.translate("GenerateWindow", u"Dialog", None))
self.generatePushButton.setText(QCoreApplication.translate("GenerateWindow", u"\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c", None))
self.label_2.setText(QCoreApplication.translate("GenerateWindow", 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.label_3.setText(QCoreApplication.translate("GenerateWindow", 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.label.setText(QCoreApplication.translate("GenerateWindow", u"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0439", None))
# retranslateUi

View File

@ -27,6 +27,10 @@ class Ui_MainWindow(object):
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.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.gridLayout = QGridLayout(self.centralwidget)
@ -46,7 +50,7 @@ class Ui_MainWindow(object):
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 800, 27))
self.menubar.setGeometry(QRect(0, 0, 800, 19))
self.filemenu = QMenu(self.menubar)
self.filemenu.setObjectName(u"filemenu")
self.generatemenu = QMenu(self.menubar)
@ -67,6 +71,8 @@ class Ui_MainWindow(object):
self.menubar.addAction(self.analyzemenu.menuAction())
self.menubar.addAction(self.modelmenu.menuAction())
self.menubar.addAction(self.helpmenu.menuAction())
self.generatemenu.addAction(self.generateYaction)
self.generatemenu.addAction(self.generateXaction)
self.helpmenu.addAction(self.aboutmenuaction)
self.retranslateUi(MainWindow)
@ -77,6 +83,8 @@ class Ui_MainWindow(object):
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.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))