Nazarchuk/Main.py
2022-10-31 18:29:30 +03:00

233 lines
6.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import sys
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,
)
class AbstractWindow(QMainWindow):
def __init__(self):
super().__init__()
self.create_actions()
self.create_menuBar()
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)
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()
def help_click(self):
print('Help')
# TODO
def about_click(self):
print('About')
# TODO
class Start:
def __init__(self):
self.number = 0
self.foldername = ''
if not QApplication.instance():
self.app = QApplication(sys.argv)
else:
self.app = QApplication.instance()
self.window = StartWindow(self)
self.draw()
self.app.exec()
def __del__(self):
print('destruct')
def draw(self):
self.window.show()
def change_number(self):
if self.number == 2:
self.window.close()
self.window = MainExperiment1Window(self)
if self.number == 1:
pass
self.draw()
class StartWindow(AbstractWindow):
def __init__(self, parent):
super().__init__()
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)
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)
self.hbox_layout = QGridLayout(self.centralwidget)
self.hbox_layout.setRowStretch(1, 1)
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)
def flow_click(self):
self.parent.number = 1
self.parent.change_number()
def main_click(self):
self.parent.number = 2
self.parent.change_number()
def enter_name(self):
self.parent.foldername = self.lineEdit.text()
self.flow.setEnabled(True)
self.main.setEnabled(True)
self.lineEdit.setReadOnly(True)
class MainExperiment1Window(AbstractWindow):
def __init__(self, parent):
super().__init__()
self.setWindowTitle('Основной эксперимент')
self.start_time = 0
self.parent = parent
# make masthead
self.dataname = 'data.txt'
file = open(os(self.parent.foldername, self.dataname), 'w')
file.write('I_0, mA U_34, mV t, s')
file.close()
self.centralwidget = QWidget()
self.resize(1400, 800)
self.setCentralWidget(self.centralwidget)
self.but = QPushButton('Измерение')
# self.but.clicked.connect(self.but_click)
self.setCentralWidget(self.but)
grid_layout = QGridLayout(self) # Create QGridLayout
self.centralwidget.setLayout(grid_layout) # Set this layout in central widget
table = QTableWidget(self) # Create a table
table.setColumnCount(3) #Set three columns
table.setRowCount(1) # and one row
# Set the table headers
table.setHorizontalHeaderLabels(["Header 1", "Header 2", "Header 3"])
#Set the tooltips to headings
table.horizontalHeaderItem(0).setToolTip("Column 1 ")
table.horizontalHeaderItem(1).setToolTip("Column 2 ")
table.horizontalHeaderItem(2).setToolTip("Column 3 ")
table.setItem(0, 0, QTableWidgetItem("Text in column 1"))
table.setItem(0, 1, QTableWidgetItem("Text in column 2"))
table.setItem(0, 2, QTableWidgetItem("Text in column 3"))
# Do the resize of the columns by content
table.resizeColumnsToContents()
grid_layout.addWidget(table, 0, 0) # Adding the table to the grid
grid_layout.addWidget(self.but, 0, 3)
def but_click(self):
# measure voltage and current
volt_name = os.path.join('/dev', 'usbtmc1')
f_volt = open(volt_name, 'w')
f_volt.write('Measure:Voltage:DC?\n')
f_volt.close()
amp_name = os.path.join('/dev', 'usbtmc2')
f_amp = open(amp_name, 'w')
f_amp.write('Measure:Current:DC?\n')
f_amp.close()
f_volt = open(volt_name, 'r')
v = f_volt.read(15)
f_amp = open(amp_name, 'r')
a = f_amp.read(15)
f_volt.close()
f_amp.close()
current_time = round(time.time()*1000)
s = v + a + str(current_time - self.start_time)
out = open(os(self.parent.foldername, self.dataname), 'a')
out.write(s)
out.close()
# start = Start()
# del 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)