Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба2.docx
Скачиваний:
4
Добавлен:
04.09.2023
Размер:
215.21 Кб
Скачать

Текст программы

«mainF.py»

import sys

import os

from statistics import mean

import numpy as np

import sqlite3

import matplotlib

matplotlib.use('Qt5Agg')

import design

import PyQt5

from design import Ui_MainWindow

from PyQt5 import QtWidgets

from PyQt5 import uic

from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog, QMessageBox, QDialog

from PyQt5.uic import loadUi

class RitmApp(QMainWindow, Ui_MainWindow, QDialog):

def __init__(self):

super().__init__()

self.setupUi(self)

self.pushButton.clicked.connect(self.open_file)

self.pushButton_2.clicked.connect(self.addToDB)

self.pushButton_4.clicked.connect(self.getPredict)

self.tableWidget.setColumnWidth(0,180)

self.tableWidget.setColumnWidth(1,160)

self.tableWidget.setColumnWidth(2,248)

self.tabWidget.tabBarClicked.connect(self.getFromDB)

self.initialLoadFromDB()

def open_file(self):

path = QFileDialog.getOpenFileName(self, "Open", "", "txt Files (*.txt);;All Files (*)")

if path[0] != "":

self.lineEdit_6.setText("")

data = np.genfromtxt(path[0])

data = data[0:len(data)-1]

maxRR = max(data)*1.2

dH = 0.05

X = np.arange(0,maxRR,dH)

H, bins_edges = np.histogram(data, X)

SH = H.sum()

PH = H/SH*100

X1 = X[0:len(X)-1]+0.025

RRsr = mean(data)

RRmin = min(data)

RRmax = max(data)

dRR = RRmax - RRmin

iMo = np.argmax(PH)

Mo = iMo*dH+0.05

self.lineEdit_5.setText(path[0])

self.MplWidget.axes.clear()

self.MplWidget.axes.stem(range(0,len(data)), data, markerfmt = "none")

self.MplWidget.axes.set_title(f'Ритмограмма \nRRsr = {np.around(RRsr,2)}, RRmin = {np.around(RRmin,2)} \nRRmax = {np.around(RRmax,2)}, dRR = {np.around(dRR,2)}, Mo = {np.around(Mo,2)}')

self.MplWidget.axes.set_xlabel('RR')

self.MplWidget.axes.set_ylabel('R-R интервалы, сек')

self.MplWidget.canvas.draw()

self.MplWidget2.axes.clear()

self.MplWidget2.axes.bar(X1,PH,0.05)

self.MplWidget2.axes.set_title('Гистограмма')

self.MplWidget2.axes.set_xlabel('R-R интервалы, сек')

self.MplWidget2.axes.set_ylabel('Кол-во ед.')

self.MplWidget2.canvas.draw()

self.MplWidget3.axes.clear()

self.MplWidget3.axes.scatter(data[1:len(data)-1], data[2:len(data)])

self.MplWidget3.axes.set_title('Скаттерограмма')

self.MplWidget3.axes.set_xlabel('RR(1:L-1)')

self.MplWidget3.axes.set_ylabel('RR(2:L)')

self.MplWidget3.canvas.draw()

def addToDB(self):

path = os.path.dirname(os.path.abspath(__file__))

db = os.path.join(path, 'ritmogramma.db')

con = sqlite3.connect(db)

cur = con.cursor()

cur.execute("""INSERT INTO users (name,age,file,diagnosis)

VALUES (?,?,?,?)""",

(self.lineEdit.text()+" "+self.lineEdit_2.text()+" "+self.lineEdit_3.text(),

self.lineEdit_4.text(),self.lineEdit_5.text(),self.lineEdit_6.text()))

con.commit()

con.close()

QMessageBox.about(self, "Статус выполнения операции", "Успешно сохранено")

def getFromDB(self, tabIndex):

if tabIndex == 1:

path = os.path.dirname(os.path.abspath(__file__))

db = os.path.join(path, 'ritmogramma.db')

con = sqlite3.connect(db)

cur = con.cursor()

cur.execute("""SELECT name, age, file, diagnosis FROM users""")

res = cur.fetchall()

con.close()

tableRow = 0

self.tableWidget.setRowCount(len(res))

for row in res:

self.tableWidget.setItem(tableRow, 0, QtWidgets.QTableWidgetItem(f"{row[0]}, {row[1]}"))

self.tableWidget.setItem(tableRow, 1, QtWidgets.QTableWidgetItem(row[3]))

self.tableWidget.setItem(tableRow, 2, QtWidgets.QTableWidgetItem(row[2]))

tableRow += 1

def getPredict(self):

path = self.lineEdit_5.text()

if len(path) != 0:

data = np.genfromtxt(path)

data = data[0:len(data)-1]

maxRR = max(data)*1.2

dH = 0.05

X = np.arange(0,maxRR,dH)

H, bins_edges = np.histogram(data, X)

SH = H.sum()

PH = H/SH*100

X1 = X[0:len(X)-1]+0.025

RRsr = mean(data)

RRmin = min(data)

RRmax = max(data)

dRR = RRmax - RRmin

iMo = np.argmax(PH)

Mo = iMo*dH+0.05

if 0.4 < RRmin < 0.55 and 0.8 < RRmax < 0.9:

self.lineEdit_6.setText("Желудочковая экстрасистолия")

elif RRmin < 0.4 and RRmax > 0.9:

self.lineEdit_6.setText("Мерцательная аритмия")

elif 0.55 < RRmin < 0.65 and 0.65 < RRmax < 0.75:

self.lineEdit_6.setText("Здоров(-а)")

else:

QMessageBox.about(self, "Статус выполнения операции", "Выберите сигнал")

def initialLoadFromDB(self):

path1 = __file__

path = os.path.dirname(os.path.abspath(__file__))

db = os.path.join(path, 'ritmogramma.db')

con = sqlite3.connect(db)

cur = con.cursor()

cur.execute("""SELECT name, age, file, diagnosis FROM users""")

res = cur.fetchall()

con.close()

tableRow = 0

self.tableWidget.setRowCount(len(res))

for row in res:

self.tableWidget.setItem(tableRow, 0, QtWidgets.QTableWidgetItem(f"{row[0]}, {row[1]}"))

self.tableWidget.setItem(tableRow, 1, QtWidgets.QTableWidgetItem(row[3]))

self.tableWidget.setItem(tableRow, 2, QtWidgets.QTableWidgetItem(row[2]))

tableRow += 1

def keyPressEvent(self, event):

if event.key() in (PyQt5.QtCore.Qt.Key_Backspace, PyQt5.QtCore.Qt.Key_Delete):

if self.tableWidget.selectionModel().hasSelection():

indices = self.tableWidget.selectionModel().selectedRows()

for index in sorted(indices):

self.tableWidget.removeRow(index.row())

if self.tableWidget.rowCount() == 0:

self.tableWidget.setColumnWidth(2,263)

if __name__ == '__main__':

app = QApplication(sys.argv)

window = RitmApp()

window.show()

sys.exit(app.exec_())

«mplwidget.py»

from PyQt5.QtWidgets import QWidget, QVBoxLayout

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar

from matplotlib.figure import Figure

class MplWidget(QWidget):

def __init__(self, parent=None):

super().__init__(parent)

self.canvas = FigureCanvas(Figure())

self.axes = self.canvas.figure.add_subplot(111)

self.toolbar = NavigationToolbar(self.canvas, self)

layout = QVBoxLayout()

layout.setContentsMargins(0, 0, 0, 0)

layout.addWidget(self.toolbar)

layout.addWidget(self.canvas)

self.setLayout(layout)

Соседние файлы в предмете Технологии автоматизации лечебного процесса