Nazarchuk/Main.py

282 lines
8.5 KiB
Python
Raw Normal View History

2022-10-31 12:45:59 +03:00
import os
import sys
2022-11-01 23:54:46 +03:00
import csv
import time
2022-10-31 12:45:59 +03:00
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QAction
from PyQt6.QtWidgets import (QHBoxLayout,
QApplication,
QCheckBox,
QComboBox,
QDateEdit,
QDateTimeEdit,
QDial,
QDoubleSpinBox,
QFontComboBox,
QLabel,
QLCDNumber,
QLineEdit,
QMainWindow,
QProgressBar,
QPushButton,
QRadioButton,
QSlider,
QSpinBox,
QTimeEdit,
QVBoxLayout,
QWidget,
QTableWidget,
QGridLayout,
QMenu,
QTableWidgetItem,
2022-11-01 23:54:46 +03:00
QHeaderView,
2022-10-31 18:29:30 +03:00
)
2022-10-31 12:45:59 +03:00
class AbstractWindow(QMainWindow):
def __init__(self):
super().__init__()
self.create_actions()
self.create_menuBar()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def create_menuBar(self):
menuBar = self.menuBar()
self.fileMenu = QMenu("&Файл", self)
menuBar.addMenu(self.fileMenu)
self.helpMenu = QMenu("&Помощь")
menuBar.addMenu(self.helpMenu)
self.fileMenu.addAction(self.exitAction)
self.helpMenu.addAction(self.helpContentAction)
self.helpMenu.addAction(self.aboutAction)
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def create_actions(self):
self.exitAction = QAction("&Выход", self)
self.exitAction.triggered.connect(self.exit_click)
self.helpContentAction = QAction("&Инструкция", self)
self.helpContentAction.triggered.connect(self.help_click)
self.aboutAction = QAction("&О программе", self)
self.aboutAction.triggered.connect(self.about_click)
def exit_click(self):
self.close()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def help_click(self):
print('Help')
# TODO
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def about_click(self):
print('About')
# TODO
class Start:
def __init__(self):
self.number = 0
2022-10-31 18:29:30 +03:00
self.foldername = ''
2022-10-31 12:45:59 +03:00
if not QApplication.instance():
self.app = QApplication(sys.argv)
else:
self.app = QApplication.instance()
self.window = StartWindow(self)
self.draw()
self.app.exec()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def __del__(self):
print('destruct')
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def draw(self):
self.window.show()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def change_number(self):
2022-10-31 18:29:30 +03:00
if self.number == 2:
2022-10-31 12:45:59 +03:00
self.window.close()
self.window = MainExperiment1Window(self)
if self.number == 1:
pass
self.draw()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
class StartWindow(AbstractWindow):
def __init__(self, parent):
super().__init__()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
self.setWindowTitle('Эффект Холла в полупроводниках')
self.parent = parent
self.centralwidget = QWidget()
self.resize(1400, 800)
self.setCentralWidget(self.centralwidget)
self.lineEdit = QLineEdit(placeholderText='Введите фамилию')
self.lineEdit.returnPressed.connect(self.enter_name)
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
self.flow = QPushButton('измерение потока')
self.flow.clicked.connect(self.flow_click)
self.flow.setEnabled(False)
self.main = QPushButton('основной эксперимент')
self.main.clicked.connect(self.main_click)
self.main.setEnabled(False)
2022-10-31 18:29:30 +03:00
self.hbox_layout = QGridLayout(self.centralwidget)
2022-10-31 12:45:59 +03:00
self.hbox_layout.setRowStretch(1, 1)
2022-10-31 18:29:30 +03:00
self.hbox_layout.addWidget(self.lineEdit, 1, 0, 1, 2)
self.hbox_layout.addWidget(self.flow, 2, 0)
self.hbox_layout.addWidget(self.main, 2, 1)
2022-10-31 12:45:59 +03:00
def flow_click(self):
2022-10-31 18:29:30 +03:00
self.parent.number = 1
2022-10-31 12:45:59 +03:00
self.parent.change_number()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def main_click(self):
2022-10-31 18:29:30 +03:00
self.parent.number = 2
2022-10-31 12:45:59 +03:00
self.parent.change_number()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
def enter_name(self):
2022-11-01 23:54:46 +03:00
# make folder
2022-10-31 18:29:30 +03:00
self.parent.foldername = self.lineEdit.text()
2022-11-01 23:54:46 +03:00
self.parent.folder = os.path.join(os.getcwd(), self.parent.foldername)
if not os.path.exists(self.parent.folder):
os.mkdir(self.parent.folder)
2022-10-31 12:45:59 +03:00
self.flow.setEnabled(True)
self.main.setEnabled(True)
self.lineEdit.setReadOnly(True)
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
class MainExperiment1Window(AbstractWindow):
def __init__(self, parent):
2022-11-01 23:54:46 +03:00
# TODO : clean code
2022-10-31 12:45:59 +03:00
super().__init__()
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
self.setWindowTitle('Основной эксперимент')
2022-10-31 18:29:30 +03:00
self.start_time = 0
2022-10-31 12:45:59 +03:00
self.parent = parent
2022-10-31 18:29:30 +03:00
# make masthead
2022-11-01 23:54:46 +03:00
self.dataname = 'data.csv'
head_1 = 'I_0,mA'
head_2 = 'U_34,mV'
head_3 = 't,s'
with open(os.path.join(self.parent.folder, self.dataname), 'w') as file:
wr = csv.writer(file)
wr.writerow([head_1, head_2, head_3])
2022-10-31 18:29:30 +03:00
2022-10-31 12:45:59 +03:00
self.centralwidget = QWidget()
self.resize(1400, 800)
self.setCentralWidget(self.centralwidget)
2022-10-31 18:29:30 +03:00
2022-11-01 23:54:46 +03:00
self.start = QPushButton('Старт')
self.start.clicked.connect(self.start_clicked_nodata)
self.start.setEnabled(False)
self.stop = QPushButton('Стоп')
self.stop.clicked.connect(self.stop_clicked)
self.stop.setEnabled(False)
2022-10-31 18:29:30 +03:00
2022-11-01 23:54:46 +03:00
grid_layout = QGridLayout(self.centralwidget)
2022-10-31 18:29:30 +03:00
2022-11-01 23:54:46 +03:00
self.table = QTableWidget(self) # Create a self.table
self.table.setColumnCount(3) #Set three columns
self.table.setRowCount(0)
2022-10-31 18:29:30 +03:00
2022-11-01 23:54:46 +03:00
self.table.setHorizontalHeaderLabels([head_1, head_2, head_3])
header = self.table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch)
header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
header.setSectionResizeMode(2, QHeaderView.ResizeMode.Stretch)
self.table.setItem(0, 0, QTableWidgetItem("Text in column 1"))
self.table.setItem(0, 1, QTableWidgetItem("Text in column 2"))
self.table.setItem(0, 2, QTableWidgetItem("Text in column 3"))
self.table.resizeColumnsToContents()
self.lineEdit = QLineEdit(placeholderText='Введите что-то')
self.lineEdit.returnPressed.connect(self.enter_smth)
2022-10-31 18:29:30 +03:00
2022-11-01 23:54:46 +03:00
grid_layout.addWidget(self.table, 0, 0, 2, 1) # Adding the table to the grid
grid_layout.addWidget(self.lineEdit, 0, 2, -1, -1)
grid_layout.addWidget(self.start, 1, 2)
grid_layout.addWidget(self.stop, 1, 3)
2022-10-31 18:29:30 +03:00
2022-11-01 23:54:46 +03:00
self.parent.draw()
def enter_smth(self):
# TODO
self.parent.smth = self.lineEdit.text()
self.start.setEnabled(True)
self.lineEdit.setReadOnly(True)
def start_clicked_nodata(self):
# function to test writing data
current_time = round(time.time()*1000)
v = str(current_time/60)
a=v
t = str(current_time-self.start_time)
with open(os.path.join(self.parent.folder, self.dataname), 'a') as file:
wr = csv.writer(file)
wr.writerow([v, a, str(current_time-self.start_time)])
self.table.insertRow(self.table.rowCount())
self.table.setItem(self.table.rowCount()-1, 0, QTableWidgetItem(v))
self.table.setItem(self.table.rowCount()-1, 1, QTableWidgetItem(a))
self.table.setItem(self.table.rowCount()-1, 2, QTableWidgetItem(t))
self.stop.setEnabled(True)
def stop_clicked(self):
# TODO
print('stop')
self.stop.setEnabled(False)
2022-10-31 18:29:30 +03:00
2022-11-01 23:54:46 +03:00
def start_click(self):
2022-10-31 18:29:30 +03:00
# measure voltage and current
2022-10-31 12:45:59 +03:00
volt_name = os.path.join('/dev', 'usbtmc1')
2022-10-31 18:29:30 +03:00
f_volt = open(volt_name, 'w')
2022-10-31 12:45:59 +03:00
f_volt.write('Measure:Voltage:DC?\n')
f_volt.close()
amp_name = os.path.join('/dev', 'usbtmc2')
2022-10-31 18:29:30 +03:00
f_amp = open(amp_name, 'w')
2022-10-31 12:45:59 +03:00
f_amp.write('Measure:Current:DC?\n')
f_amp.close()
2022-10-31 18:29:30 +03:00
f_volt = open(volt_name, 'r')
2022-10-31 12:45:59 +03:00
v = f_volt.read(15)
2022-10-31 18:29:30 +03:00
f_amp = open(amp_name, 'r')
2022-10-31 12:45:59 +03:00
a = f_amp.read(15)
f_volt.close()
f_amp.close()
2022-10-31 18:29:30 +03:00
current_time = round(time.time()*1000)
s = v + a + str(current_time - self.start_time)
2022-11-01 23:54:46 +03:00
with open(os.path.join(self.parent.folder, self.dataname), 'a') as file:
wr = csv.writer(file)
wr.writerow([v, a, str(current_time-self.start_time)])
start = Start()
# =============================================================================
# import time
# import serial
#
# ser=serial.Serial(
# port='/dev/ttyUSB0',
# baudrate=9600,
# timeout=1
# )
# ser.isOpen()
#
# msg='SYSTem:REMote\n'
# ser.write(msg.encode('ascii'))
#
# while 1:
#
# msg='Read?\n'
# ser.write(msg.encode('ascii'))
# time.sleep(1)
#
# bytesToRead=ser.inWaiting()
# data=ser.read(bytesToRead)
# print(data)
#
# =============================================================================