Relevante Dateien und Umgebung gesammelt

This commit is contained in:
jens 2022-07-28 11:17:26 +02:00
commit f98949b798
10 changed files with 4788 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
build/
dist/
__pycache__/

14
jfs_info.txt Normal file
View File

@ -0,0 +1,14 @@
Juni 2022
This creates an Environment for the Software based on
poseidon https://github.com/pachterlab/poseidon
PyQtGraph https://www.pyqtgraph.org/
conda create --name piPyGra
conda activate piPyGra
conda install -c conda-forge pyqtgraph
conda install pyserial
pip install pyinstaller pyqt5
pip install PyQtWebEngine
...
conda deactivate

307
jfs_main01.py Normal file
View File

@ -0,0 +1,307 @@
from poseidon_main import MainWindow, Thread
import sys, time
import serial
from PyQt5 import QtCore, QtWidgets
import pyqtgraph as pg
class MainWindow2( MainWindow):
leftsignal = QtCore.pyqtSignal(float)
def __init__(self):
super(MainWindow2,self).__init__()
self.setWindowTitle('Pyshi´ne drag and drop')
#print(self.globports)
#print(self.microstepping)
self.threadx = {}
## grapfic output
self.timeBase=50
self.x = []
self.y = []
self.grafwg = pg.PlotWidget()
self.ui.gridLayout_2.addWidget(self.grafwg, 0, 1, 1, 1)
self.data_line = self.grafwg.plot(self.x,self.y,pen=(0,255,0))
## limit to stop the flow
self.wait2Stopflow = False
self.stopFlowLimit = 0
## serail things
if self.globports == []:
self.populate_ports()
self.ui.rheo_port_comboBox.addItems(self.globports)
self.ui.comboBox.addItems(self.globports)
#self.ui.rheo_port_comboBox.currentIndexChanged['QString'].connect(self.setRheoPort)
self.ui.openRheo_btn.clicked.connect(self.connectESP32)
self.ui.closeRheo_btn.clicked.connect(self.disconnectESP32)
self.ui.clearDisplay.clicked.connect(self.clearPlot)
self.ui.start_btn.clicked.connect(self.startesp32)
self.ui.stop_btn.clicked.connect(self.stopesp32)
self.ui.comboBox_tb.setCurrentText(str(self.timeBase))
self.ui.comboBox_tb.currentIndexChanged['QString'].connect(self.setTimeBase)
self.ui.checkBox.stateChanged.connect(self.clickedBox)
self.ui.lineEdit.returnPressed.connect(self.setFrequency)
self.ui.checkBox_2.stateChanged.connect(self.flowBox)
self.ui.pushButton.clicked.connect(self.connectRheo)
self.ui.pushButton_2.clicked.connect(self.disconnectRheo)
self.ui.checkBox_3.stateChanged.connect(self.clickedBox3)
self.ui.pushButton_3.clicked.connect(self.sendRheoHome)
self.ui.pushButton_4.clicked.connect(self.sendRheoInject)
self.leftsignal.connect(self.setwhatsleft)
### ESP32
def setFrequency(self):
s = self.ui.lineEdit.text()
cmd='o'+str(s)+'\n'
thread = Thread(self.sendToEsp32, cmd)
thread.finished.connect(lambda:self.thread_finished(thread))
thread.start()
def sendToEsp32(self, sendStr):
self.esp32_serial.write(sendStr.encode('utf-8'))
self.esp32_serial.flushInput()
def clickedBox(self,state):
if state == QtCore.Qt.Checked:
print('checkes')
self.threadx[2] =ThC_2(parent=None,port = self.esp32_serial)
self.threadx[2].start()
else:
print('no')
self.threadx[2].stop()
def flowBox(self,state):
if state == QtCore.Qt.Checked:
print('checkes')
self.wait2Stopflow=True
self.stopFlowLimit = float(self.ui.lineEdit_2.text())
else:
print('no')
self.wait2Stopflow=False
def startesp32(self):
self.threadx[1] = ThC(parent=None,index=1,port = self.esp32_serial,base=self.timeBase)
self.threadx[1].start()
self.threadx[1].datasignal.connect(self.updateData)
self.ui.start_btn.setEnabled(False)
self.ui.stop_btn.setEnabled(True)
def stopesp32(self):
self.threadx[1].stop()
self.ui.start_btn.setEnabled(True)
self.ui.stop_btn.setEnabled(False)
def setTimeBase(self):
self.timeBase=int(self.ui.comboBox_tb.currentText())
def connectRheo(self):
self.rheo_port = self.ui.comboBox.currentText()
self.statusBar().showMessage("You clicked CONNECT TO Rheo Ventil")
try:
port_declared = self.port in vars()
try:
print(self.rheo_port)
self.rheo_serial = serial.Serial()
self.rheo_serial.port = self.rheo_port
self.rheo_serial.baudrate = 115200
self.rheo_serial.parity = serial.PARITY_NONE
self.rheo_serial.stopbits = serial.STOPBITS_ONE
self.rheo_serial.bytesize = serial.EIGHTBITS
self.rheo_serial.timeout = 1
self.rheo_serial.open()
# self.ui.closeRheo_btn.setEnabled(True)
# self.ui.openRheo_btn.setEnabled(False)
# self.ui.start_btn.setEnabled(True)
# self.ui.stop_btn.setEnabled(False)
# self.ui.connect_BTN.setEnabled(False)
time.sleep(1)
self.statusBar().showMessage("Successfully connected to Rheo board.")
except:
self.statusBar().showMessage("Cannot connect to board. Try again..")
#raise CannotConnectException
except AttributeError:
self.statusBar().showMessage("Please plug in the board and select a proper port, then press connect.")
def disconnectRheo(self):
self.statusBar().showMessage("You clicked DISCONNECT FROM Rheo")
print("Disconnecting from board..")
time.sleep(0.1)
self.rheo_serial.close()
print("Board has been disconnected")
def clickedBox3(self,state):
if state == QtCore.Qt.Checked:
print('checkes')
self.sendRheoLoad()
else:
print('no')
self.sendRheoVentil()
def sendRheoInject(self):
xx = int(self.ui.lineEdit_3.text())
if (xx > 7) or (xx<0):
cmd=str(xx)+'\r\n'
self.sendToRheo(cmd)
def sendRheoHome(self):
cmd=str(3)+'\r\n'
self.sendToRheo(cmd)
def sendRheoLoad(self):
cmd=str(1)+'\r\n'
self.sendToRheo(cmd)
def sendRheoVentil(self):
cmd=str(2)+'\r\n'
self.sendToRheo(cmd)
def sendToRheo(self,cmd):
thread = Thread(self.sendRheo, cmd)
thread.finished.connect(lambda:self.thread_finished(thread))
thread.start()
def setwhatsleft(self,xx):
print (f'that left {xx} ')
def sendRheo(self, sendStr):
self.rheo_serial.flushInput()
self.rheo_serial.write(sendStr.encode('utf-8'))
cmd=str(5)+'\r\n'
self.rheo_serial.write(sendStr.encode('utf-8'))
inp = self.rheo_serial.readline().decode('utf')
self.leftsignal.emit(float(inp))
def connectESP32(self):
self.esp32_port = self.ui.rheo_port_comboBox.currentText()
self.statusBar().showMessage("You clicked CONNECT TO Esp32")
try:
port_declared = self.port in vars()
try:
print(self.esp32_port)
self.esp32_serial = serial.Serial()
self.esp32_serial.port = self.esp32_port
self.esp32_serial.baudrate = 115200
self.esp32_serial.parity = serial.PARITY_NONE
self.esp32_serial.stopbits = serial.STOPBITS_ONE
self.esp32_serial.bytesize = serial.EIGHTBITS
self.esp32_serial.timeout = 1
self.esp32_serial.open()
self.ui.closeRheo_btn.setEnabled(True)
self.ui.openRheo_btn.setEnabled(False)
self.ui.start_btn.setEnabled(True)
self.ui.stop_btn.setEnabled(False)
# self.ui.connect_BTN.setEnabled(False)
time.sleep(1)
self.statusBar().showMessage("Successfully connected to esp32 board.")
except:
self.statusBar().showMessage("Cannot connect to board. Try again..")
#raise CannotConnectException
except AttributeError:
self.statusBar().showMessage("Please plug in the board and select a proper port, then press connect.")
def disconnectESP32(self):
self.statusBar().showMessage("You clicked DISCONNECT FROM ESP32")
print("Disconnecting from board..")
time.sleep(0.1)
self.esp32_serial.close()
print("Board has been disconnected")
self.ui.openRheo_btn.setEnabled(True)
self.ui.closeRheo_btn.setEnabled(False)
self.ui.start_btn.setEnabled(False)
self.ui.stop_btn.setEnabled(False)
def checkForStopFlow(self):
if self.checkForStopFlow :
if self.y[-1] > self.stopFlowLimit :
self.ui.pause_BTN.clicked.emit()
def updateData(self,x,y):
self.x.append(x)
self.y.append(y)
self.data_line.setData(self.x,self.y)
if self.wait2Stopflow == True:
if (self.y[-1] >= self.stopFlowLimit):
self.ui.pause_BTN.clicked.emit()
self.wait2Stopflow = False
self.ui.checkBox_2.setChecked(False)
def clearPlot(self):
self.x.clear()
self.y.clear()
self.data_line.setData(self.x,self.y)
def sendToEsp32(self, sendStr):
self.esp32_serial.write(sendStr.encode())
self.esp32_serial.flushInput()
class ThC(QtCore.QThread):
datasignal = QtCore.pyqtSignal(int,float)
def __init__(self,parent=None,port=None,index=0,base=100):
super(ThC, self).__init__(parent)
self.index = index
self.is_running = True
self.port = port
self.base = base
def run(self):
print(f"Thread {self.index} started")
self.port.flushOutput()
self.port.flushInput()
i = self.base*1000
cmd = 's'+str(i)+'\n'
self.port.write(cmd.encode('utf-8'))
cnt = 0;
while True:
cnt+=1
inp = self.port.readline()
if inp[0] == 62 and inp[-3] == 60 :
inp = inp[1:-3]
y = float(inp.decode('utf-8'))
self.datasignal.emit(cnt,y)
time.sleep(0.001)
def stop(self):
self.is_running=False
print(f"Thread {self.index} stopped")
self.terminate()
class ThC_2(QtCore.QThread):
def __init__(self,parent=None,port=None):
super(ThC_2,self).__init__(parent)
self.is_running = True
self.port=port
def run(self):
cnt=0
while True:
cnt+= 1
if cnt >= 100 : cnt = 1
cmd = 'o'+str(cnt*10000)+'\n'
print(cmd)
self.port.write(cmd.encode('utf-8'))
time.sleep(1)
def stop(self):
self.is_running=False
print(f'Thread ThC-2 stopped')
self.terminate()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow2()
window.show()
sys.exit(app.exec_())

963
poseidon_controller_gui2.py Normal file
View File

@ -0,0 +1,963 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'poseidon_controller_gui2.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1071, 869)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setFocusPolicy(QtCore.Qt.TabFocus)
self.tabWidget.setAcceptDrops(False)
self.tabWidget.setTabPosition(QtWidgets.QTabWidget.North)
self.tabWidget.setTabShape(QtWidgets.QTabWidget.Triangular)
self.tabWidget.setIconSize(QtCore.QSize(16, 16))
self.tabWidget.setMovable(False)
self.tabWidget.setObjectName("tabWidget")
self.control = QtWidgets.QWidget()
self.control.setObjectName("control")
self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self.control)
self.horizontalLayout_10.setObjectName("horizontalLayout_10")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.verticalLayout_9 = QtWidgets.QVBoxLayout()
self.verticalLayout_9.setObjectName("verticalLayout_9")
self.gridLayout_6 = QtWidgets.QGridLayout()
self.gridLayout_6.setObjectName("gridLayout_6")
self.line_4 = QtWidgets.QFrame(self.control)
self.line_4.setFrameShadow(QtWidgets.QFrame.Raised)
self.line_4.setLineWidth(3)
self.line_4.setFrameShape(QtWidgets.QFrame.VLine)
self.line_4.setObjectName("line_4")
self.gridLayout_6.addWidget(self.line_4, 0, 2, 1, 1)
self.label = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setText("")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.gridLayout_6.addWidget(self.label, 0, 0, 1, 1)
self.p2_incremental_DISP = QtWidgets.QLCDNumber(self.control)
self.p2_incremental_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p2_incremental_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p2_incremental_DISP.setDigitCount(5)
self.p2_incremental_DISP.setObjectName("p2_incremental_DISP")
self.gridLayout_6.addWidget(self.p2_incremental_DISP, 2, 3, 1, 1)
self.p3_remain_DISP = QtWidgets.QLCDNumber(self.control)
self.p3_remain_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p3_remain_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p3_remain_DISP.setDigitCount(5)
self.p3_remain_DISP.setObjectName("p3_remain_DISP")
self.gridLayout_6.addWidget(self.p3_remain_DISP, 3, 4, 1, 1)
self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.p2_activate_CHECKBOX = QtWidgets.QCheckBox(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.p2_activate_CHECKBOX.sizePolicy().hasHeightForWidth())
self.p2_activate_CHECKBOX.setSizePolicy(sizePolicy)
self.p2_activate_CHECKBOX.setText("")
self.p2_activate_CHECKBOX.setObjectName("p2_activate_CHECKBOX")
self.horizontalLayout_12.addWidget(self.p2_activate_CHECKBOX)
self.label_6 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_6.setFont(font)
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
self.label_6.setObjectName("label_6")
self.horizontalLayout_12.addWidget(self.label_6)
self.gridLayout_6.addLayout(self.horizontalLayout_12, 0, 3, 1, 1)
self.label_56 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
self.label_56.setFont(font)
self.label_56.setAlignment(QtCore.Qt.AlignCenter)
self.label_56.setObjectName("label_56")
self.gridLayout_6.addWidget(self.label_56, 2, 0, 1, 1)
self.p3_incremental_DISP = QtWidgets.QLCDNumber(self.control)
self.p3_incremental_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p3_incremental_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p3_incremental_DISP.setDigitCount(5)
self.p3_incremental_DISP.setObjectName("p3_incremental_DISP")
self.gridLayout_6.addWidget(self.p3_incremental_DISP, 2, 4, 1, 1)
self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
self.horizontalLayout_14.setObjectName("horizontalLayout_14")
self.p1_activate_CHECKBOX = QtWidgets.QCheckBox(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.p1_activate_CHECKBOX.sizePolicy().hasHeightForWidth())
self.p1_activate_CHECKBOX.setSizePolicy(sizePolicy)
self.p1_activate_CHECKBOX.setText("")
self.p1_activate_CHECKBOX.setObjectName("p1_activate_CHECKBOX")
self.horizontalLayout_14.addWidget(self.p1_activate_CHECKBOX)
self.label_8 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_8.setFont(font)
self.label_8.setAlignment(QtCore.Qt.AlignCenter)
self.label_8.setObjectName("label_8")
self.horizontalLayout_14.addWidget(self.label_8)
self.gridLayout_6.addLayout(self.horizontalLayout_14, 0, 1, 1, 1)
self.label_57 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
self.label_57.setFont(font)
self.label_57.setAlignment(QtCore.Qt.AlignCenter)
self.label_57.setObjectName("label_57")
self.gridLayout_6.addWidget(self.label_57, 3, 0, 1, 1)
self.p2_absolute_DISP = QtWidgets.QLCDNumber(self.control)
self.p2_absolute_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p2_absolute_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p2_absolute_DISP.setDigitCount(5)
self.p2_absolute_DISP.setObjectName("p2_absolute_DISP")
self.gridLayout_6.addWidget(self.p2_absolute_DISP, 1, 3, 1, 1)
self.p1_remain_DISP = QtWidgets.QLCDNumber(self.control)
self.p1_remain_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p1_remain_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p1_remain_DISP.setDigitCount(5)
self.p1_remain_DISP.setObjectName("p1_remain_DISP")
self.gridLayout_6.addWidget(self.p1_remain_DISP, 3, 1, 1, 1)
self.p1_incremental_DISP = QtWidgets.QLCDNumber(self.control)
self.p1_incremental_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p1_incremental_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p1_incremental_DISP.setDigitCount(5)
self.p1_incremental_DISP.setObjectName("p1_incremental_DISP")
self.gridLayout_6.addWidget(self.p1_incremental_DISP, 2, 1, 1, 1)
self.label_58 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
self.label_58.setFont(font)
self.label_58.setAlignment(QtCore.Qt.AlignCenter)
self.label_58.setObjectName("label_58")
self.gridLayout_6.addWidget(self.label_58, 1, 0, 1, 1)
self.p3_absolute_DISP = QtWidgets.QLCDNumber(self.control)
self.p3_absolute_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p3_absolute_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p3_absolute_DISP.setDigitCount(5)
self.p3_absolute_DISP.setObjectName("p3_absolute_DISP")
self.gridLayout_6.addWidget(self.p3_absolute_DISP, 1, 4, 1, 1)
self.p2_remain_DISP = QtWidgets.QLCDNumber(self.control)
self.p2_remain_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p2_remain_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p2_remain_DISP.setDigitCount(5)
self.p2_remain_DISP.setObjectName("p2_remain_DISP")
self.gridLayout_6.addWidget(self.p2_remain_DISP, 3, 3, 1, 1)
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
self.line_5 = QtWidgets.QFrame(self.control)
self.line_5.setFrameShadow(QtWidgets.QFrame.Raised)
self.line_5.setLineWidth(3)
self.line_5.setFrameShape(QtWidgets.QFrame.VLine)
self.line_5.setObjectName("line_5")
self.horizontalLayout_13.addWidget(self.line_5)
self.p3_activate_CHECKBOX = QtWidgets.QCheckBox(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.p3_activate_CHECKBOX.sizePolicy().hasHeightForWidth())
self.p3_activate_CHECKBOX.setSizePolicy(sizePolicy)
self.p3_activate_CHECKBOX.setText("")
self.p3_activate_CHECKBOX.setObjectName("p3_activate_CHECKBOX")
self.horizontalLayout_13.addWidget(self.p3_activate_CHECKBOX)
self.label_25 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_25.setFont(font)
self.label_25.setAlignment(QtCore.Qt.AlignCenter)
self.label_25.setObjectName("label_25")
self.horizontalLayout_13.addWidget(self.label_25)
self.gridLayout_6.addLayout(self.horizontalLayout_13, 0, 4, 1, 1)
self.p1_absolute_DISP = QtWidgets.QLCDNumber(self.control)
self.p1_absolute_DISP.setFrameShape(QtWidgets.QFrame.Panel)
self.p1_absolute_DISP.setFrameShadow(QtWidgets.QFrame.Sunken)
self.p1_absolute_DISP.setDigitCount(4)
self.p1_absolute_DISP.setObjectName("p1_absolute_DISP")
self.gridLayout_6.addWidget(self.p1_absolute_DISP, 1, 1, 1, 1)
self.verticalLayout_9.addLayout(self.gridLayout_6)
self.line_3 = QtWidgets.QFrame(self.control)
self.line_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.line_3.setLineWidth(2)
self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
self.line_3.setObjectName("line_3")
self.verticalLayout_9.addWidget(self.line_3)
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.p2_amount_INPUT = QtWidgets.QDoubleSpinBox(self.control)
self.p2_amount_INPUT.setDecimals(3)
self.p2_amount_INPUT.setMinimum(-99.0)
self.p2_amount_INPUT.setObjectName("p2_amount_INPUT")
self.horizontalLayout_9.addWidget(self.p2_amount_INPUT)
self.horizontalLayout_8.addLayout(self.horizontalLayout_9)
self.p2_units_LABEL_2 = QtWidgets.QLabel(self.control)
self.p2_units_LABEL_2.setAlignment(QtCore.Qt.AlignCenter)
self.p2_units_LABEL_2.setObjectName("p2_units_LABEL_2")
self.horizontalLayout_8.addWidget(self.p2_units_LABEL_2)
self.gridLayout_3.addLayout(self.horizontalLayout_8, 3, 3, 1, 1)
self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
self.horizontalLayout_16.setObjectName("horizontalLayout_16")
self.p3_amount_INPUT = QtWidgets.QDoubleSpinBox(self.control)
self.p3_amount_INPUT.setDecimals(3)
self.p3_amount_INPUT.setMinimum(-99.0)
self.p3_amount_INPUT.setObjectName("p3_amount_INPUT")
self.horizontalLayout_16.addWidget(self.p3_amount_INPUT)
self.horizontalLayout_15.addLayout(self.horizontalLayout_16)
self.p3_units_LABEL_2 = QtWidgets.QLabel(self.control)
self.p3_units_LABEL_2.setAlignment(QtCore.Qt.AlignCenter)
self.p3_units_LABEL_2.setObjectName("p3_units_LABEL_2")
self.horizontalLayout_15.addWidget(self.p3_units_LABEL_2)
self.gridLayout_3.addLayout(self.horizontalLayout_15, 4, 3, 1, 1)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.p1_amount_INPUT = QtWidgets.QDoubleSpinBox(self.control)
self.p1_amount_INPUT.setDecimals(3)
self.p1_amount_INPUT.setMinimum(-99.0)
self.p1_amount_INPUT.setObjectName("p1_amount_INPUT")
self.horizontalLayout_6.addWidget(self.p1_amount_INPUT)
self.horizontalLayout.addLayout(self.horizontalLayout_6)
self.p1_units_LABEL_2 = QtWidgets.QLabel(self.control)
self.p1_units_LABEL_2.setAlignment(QtCore.Qt.AlignCenter)
self.p1_units_LABEL_2.setObjectName("p1_units_LABEL_2")
self.horizontalLayout.addWidget(self.p1_units_LABEL_2)
self.gridLayout_3.addLayout(self.horizontalLayout, 2, 3, 1, 1)
self.label_23 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(75)
self.label_23.setFont(font)
self.label_23.setText("")
self.label_23.setAlignment(QtCore.Qt.AlignCenter)
self.label_23.setObjectName("label_23")
self.gridLayout_3.addWidget(self.label_23, 1, 0, 1, 1)
self.label_14 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_14.setFont(font)
self.label_14.setAlignment(QtCore.Qt.AlignCenter)
self.label_14.setObjectName("label_14")
self.gridLayout_3.addWidget(self.label_14, 3, 0, 1, 1)
self.label_15 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_15.setFont(font)
self.label_15.setAlignment(QtCore.Qt.AlignCenter)
self.label_15.setObjectName("label_15")
self.gridLayout_3.addWidget(self.label_15, 4, 0, 1, 1)
self.label_24 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(75)
self.label_24.setFont(font)
self.label_24.setAlignment(QtCore.Qt.AlignCenter)
self.label_24.setObjectName("label_24")
self.gridLayout_3.addWidget(self.label_24, 1, 2, 1, 1)
self.p1_units_LABEL = QtWidgets.QLabel(self.control)
self.p1_units_LABEL.setAlignment(QtCore.Qt.AlignCenter)
self.p1_units_LABEL.setObjectName("p1_units_LABEL")
self.gridLayout_3.addWidget(self.p1_units_LABEL, 2, 2, 1, 1)
self.p3_syringe_LABEL = QtWidgets.QLabel(self.control)
self.p3_syringe_LABEL.setAlignment(QtCore.Qt.AlignCenter)
self.p3_syringe_LABEL.setObjectName("p3_syringe_LABEL")
self.gridLayout_3.addWidget(self.p3_syringe_LABEL, 4, 1, 1, 1)
self.p2_units_LABEL = QtWidgets.QLabel(self.control)
self.p2_units_LABEL.setAlignment(QtCore.Qt.AlignCenter)
self.p2_units_LABEL.setObjectName("p2_units_LABEL")
self.gridLayout_3.addWidget(self.p2_units_LABEL, 3, 2, 1, 1)
self.label_13 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_13.setFont(font)
self.label_13.setAlignment(QtCore.Qt.AlignCenter)
self.label_13.setObjectName("label_13")
self.gridLayout_3.addWidget(self.label_13, 2, 0, 1, 1)
self.label_27 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(75)
self.label_27.setFont(font)
self.label_27.setAlignment(QtCore.Qt.AlignCenter)
self.label_27.setObjectName("label_27")
self.gridLayout_3.addWidget(self.label_27, 1, 1, 1, 1)
self.p3_units_LABEL = QtWidgets.QLabel(self.control)
self.p3_units_LABEL.setAlignment(QtCore.Qt.AlignCenter)
self.p3_units_LABEL.setObjectName("p3_units_LABEL")
self.gridLayout_3.addWidget(self.p3_units_LABEL, 4, 2, 1, 1)
self.p2_syringe_LABEL = QtWidgets.QLabel(self.control)
self.p2_syringe_LABEL.setAlignment(QtCore.Qt.AlignCenter)
self.p2_syringe_LABEL.setObjectName("p2_syringe_LABEL")
self.gridLayout_3.addWidget(self.p2_syringe_LABEL, 3, 1, 1, 1)
self.p1_syringe_LABEL = QtWidgets.QLabel(self.control)
self.p1_syringe_LABEL.setAlignment(QtCore.Qt.AlignCenter)
self.p1_syringe_LABEL.setObjectName("p1_syringe_LABEL")
self.gridLayout_3.addWidget(self.p1_syringe_LABEL, 2, 1, 1, 1)
self.label_10 = QtWidgets.QLabel(self.control)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setItalic(False)
font.setUnderline(False)
font.setWeight(75)
self.label_10.setFont(font)
self.label_10.setAlignment(QtCore.Qt.AlignCenter)
self.label_10.setObjectName("label_10")
self.gridLayout_3.addWidget(self.label_10, 1, 3, 1, 1)
self.verticalLayout_9.addLayout(self.gridLayout_3)
self.horizontalLayout_3.addLayout(self.verticalLayout_9)
self.line = QtWidgets.QFrame(self.control)
self.line.setFrameShadow(QtWidgets.QFrame.Raised)
self.line.setLineWidth(2)
self.line.setFrameShape(QtWidgets.QFrame.VLine)
self.line.setObjectName("line")
self.horizontalLayout_3.addWidget(self.line)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
self.run_BTN = QtWidgets.QPushButton(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.run_BTN.sizePolicy().hasHeightForWidth())
self.run_BTN.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.run_BTN.setFont(font)
self.run_BTN.setObjectName("run_BTN")
self.horizontalLayout_11.addWidget(self.run_BTN)
self.pause_BTN = QtWidgets.QPushButton(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pause_BTN.sizePolicy().hasHeightForWidth())
self.pause_BTN.setSizePolicy(sizePolicy)
self.pause_BTN.setObjectName("pause_BTN")
self.horizontalLayout_11.addWidget(self.pause_BTN)
self.zero_BTN = QtWidgets.QPushButton(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.zero_BTN.sizePolicy().hasHeightForWidth())
self.zero_BTN.setSizePolicy(sizePolicy)
self.zero_BTN.setObjectName("zero_BTN")
self.horizontalLayout_11.addWidget(self.zero_BTN)
self.verticalLayout_2.addLayout(self.horizontalLayout_11)
self.stop_BTN = QtWidgets.QPushButton(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.stop_BTN.sizePolicy().hasHeightForWidth())
self.stop_BTN.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.stop_BTN.setFont(font)
self.stop_BTN.setObjectName("stop_BTN")
self.verticalLayout_2.addWidget(self.stop_BTN)
self.line_2 = QtWidgets.QFrame(self.control)
self.line_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.line_2.setLineWidth(2)
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setObjectName("line_2")
self.verticalLayout_2.addWidget(self.line_2)
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.verticalLayout_12 = QtWidgets.QVBoxLayout()
self.verticalLayout_12.setObjectName("verticalLayout_12")
self.jog_plus_BTN = QtWidgets.QPushButton(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.jog_plus_BTN.sizePolicy().hasHeightForWidth())
self.jog_plus_BTN.setSizePolicy(sizePolicy)
self.jog_plus_BTN.setObjectName("jog_plus_BTN")
self.verticalLayout_12.addWidget(self.jog_plus_BTN)
self.jog_minus_BTN = QtWidgets.QPushButton(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.jog_minus_BTN.sizePolicy().hasHeightForWidth())
self.jog_minus_BTN.setSizePolicy(sizePolicy)
self.jog_minus_BTN.setObjectName("jog_minus_BTN")
self.verticalLayout_12.addWidget(self.jog_minus_BTN)
self.horizontalLayout_4.addLayout(self.verticalLayout_12)
self.line_15 = QtWidgets.QFrame(self.control)
self.line_15.setFrameShadow(QtWidgets.QFrame.Raised)
self.line_15.setLineWidth(2)
self.line_15.setFrameShape(QtWidgets.QFrame.VLine)
self.line_15.setObjectName("line_15")
self.horizontalLayout_4.addWidget(self.line_15)
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.label_43 = QtWidgets.QLabel(self.control)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_43.sizePolicy().hasHeightForWidth())
self.label_43.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_43.setFont(font)
self.label_43.setAlignment(QtCore.Qt.AlignCenter)
self.label_43.setObjectName("label_43")
self.verticalLayout_3.addWidget(self.label_43)
self.absolute_RADIO = QtWidgets.QRadioButton(self.control)
font = QtGui.QFont()
font.setPointSize(15)
self.absolute_RADIO.setFont(font)
self.absolute_RADIO.setChecked(True)
self.absolute_RADIO.setObjectName("absolute_RADIO")
self.verticalLayout_3.addWidget(self.absolute_RADIO)
self.incremental_RADIO = QtWidgets.QRadioButton(self.control)
font = QtGui.QFont()
font.setPointSize(15)
self.incremental_RADIO.setFont(font)
self.incremental_RADIO.setObjectName("incremental_RADIO")
self.verticalLayout_3.addWidget(self.incremental_RADIO)
self.horizontalLayout_4.addLayout(self.verticalLayout_3)
self.verticalLayout_2.addLayout(self.horizontalLayout_4)
self.horizontalLayout_3.addLayout(self.verticalLayout_2)
self.horizontalLayout_10.addLayout(self.horizontalLayout_3)
self.tabWidget.addTab(self.control, "")
self.camera = QtWidgets.QWidget()
self.camera.setObjectName("camera")
self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.camera)
self.verticalLayout_11.setObjectName("verticalLayout_11")
self.imgLabel = QtWidgets.QLabel(self.camera)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.imgLabel.sizePolicy().hasHeightForWidth())
self.imgLabel.setSizePolicy(sizePolicy)
self.imgLabel.setText("")
self.imgLabel.setAlignment(QtCore.Qt.AlignCenter)
self.imgLabel.setObjectName("imgLabel")
self.verticalLayout_11.addWidget(self.imgLabel)
self.verticalLayout_10 = QtWidgets.QVBoxLayout()
self.verticalLayout_10.setObjectName("verticalLayout_10")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.camera_connect_BTN = QtWidgets.QPushButton(self.camera)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.camera_connect_BTN.sizePolicy().hasHeightForWidth())
self.camera_connect_BTN.setSizePolicy(sizePolicy)
self.camera_connect_BTN.setObjectName("camera_connect_BTN")
self.horizontalLayout_5.addWidget(self.camera_connect_BTN)
self.camera_disconnect_BTN = QtWidgets.QPushButton(self.camera)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.camera_disconnect_BTN.sizePolicy().hasHeightForWidth())
self.camera_disconnect_BTN.setSizePolicy(sizePolicy)
self.camera_disconnect_BTN.setObjectName("camera_disconnect_BTN")
self.horizontalLayout_5.addWidget(self.camera_disconnect_BTN)
self.camera_capture_image_BTN = QtWidgets.QPushButton(self.camera)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.camera_capture_image_BTN.sizePolicy().hasHeightForWidth())
self.camera_capture_image_BTN.setSizePolicy(sizePolicy)
self.camera_capture_image_BTN.setObjectName("camera_capture_image_BTN")
self.horizontalLayout_5.addWidget(self.camera_capture_image_BTN)
self.verticalLayout_10.addLayout(self.horizontalLayout_5)
self.verticalLayout_11.addLayout(self.verticalLayout_10)
self.tabWidget.addTab(self.camera, "")
self.setup = QtWidgets.QWidget()
self.setup.setObjectName("setup")
self.verticalLayout_14 = QtWidgets.QVBoxLayout(self.setup)
self.verticalLayout_14.setObjectName("verticalLayout_14")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_7 = QtWidgets.QLabel(self.setup)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth())
self.label_7.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setPointSize(15)
self.label_7.setFont(font)
self.label_7.setObjectName("label_7")
self.horizontalLayout_2.addWidget(self.label_7)
self.port_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.port_DROPDOWN.setObjectName("port_DROPDOWN")
self.horizontalLayout_2.addWidget(self.port_DROPDOWN)
self.refresh_ports_BTN = QtWidgets.QPushButton(self.setup)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.refresh_ports_BTN.sizePolicy().hasHeightForWidth())
self.refresh_ports_BTN.setSizePolicy(sizePolicy)
self.refresh_ports_BTN.setObjectName("refresh_ports_BTN")
self.horizontalLayout_2.addWidget(self.refresh_ports_BTN)
self.verticalLayout_14.addLayout(self.horizontalLayout_2)
self.horizontalLayout_17 = QtWidgets.QHBoxLayout()
self.horizontalLayout_17.setObjectName("horizontalLayout_17")
self.label_5 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.horizontalLayout_17.addWidget(self.label_5)
self.microstepping_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.microstepping_DROPDOWN.setObjectName("microstepping_DROPDOWN")
self.horizontalLayout_17.addWidget(self.microstepping_DROPDOWN)
self.verticalLayout_14.addLayout(self.horizontalLayout_17)
self.line_6 = QtWidgets.QFrame(self.setup)
self.line_6.setFrameShadow(QtWidgets.QFrame.Raised)
self.line_6.setFrameShape(QtWidgets.QFrame.HLine)
self.line_6.setObjectName("line_6")
self.verticalLayout_14.addWidget(self.line_6)
self.verticalLayout_13 = QtWidgets.QVBoxLayout()
self.verticalLayout_13.setObjectName("verticalLayout_13")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.p3_units_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.p3_units_DROPDOWN.setObjectName("p3_units_DROPDOWN")
self.gridLayout.addWidget(self.p3_units_DROPDOWN, 3, 2, 1, 1)
self.p2_units_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.p2_units_DROPDOWN.setObjectName("p2_units_DROPDOWN")
self.gridLayout.addWidget(self.p2_units_DROPDOWN, 2, 2, 1, 1)
self.p2_accel_INPUT = QtWidgets.QDoubleSpinBox(self.setup)
self.p2_accel_INPUT.setMaximum(99999.99)
self.p2_accel_INPUT.setObjectName("p2_accel_INPUT")
self.gridLayout.addWidget(self.p2_accel_INPUT, 2, 4, 1, 1)
self.label_19 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_19.setFont(font)
self.label_19.setObjectName("label_19")
self.gridLayout.addWidget(self.label_19, 0, 4, 1, 1)
self.p1_speed_INPUT = QtWidgets.QDoubleSpinBox(self.setup)
self.p1_speed_INPUT.setDecimals(4)
self.p1_speed_INPUT.setMaximum(9999.999)
self.p1_speed_INPUT.setObjectName("p1_speed_INPUT")
self.gridLayout.addWidget(self.p1_speed_INPUT, 1, 3, 1, 1)
self.p2_syringe_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.p2_syringe_DROPDOWN.setObjectName("p2_syringe_DROPDOWN")
self.gridLayout.addWidget(self.p2_syringe_DROPDOWN, 2, 1, 1, 1)
self.p2_speed_INPUT = QtWidgets.QDoubleSpinBox(self.setup)
self.p2_speed_INPUT.setDecimals(4)
self.p2_speed_INPUT.setMaximum(9999.999)
self.p2_speed_INPUT.setObjectName("p2_speed_INPUT")
self.gridLayout.addWidget(self.p2_speed_INPUT, 2, 3, 1, 1)
self.p1_accel_INPUT = QtWidgets.QDoubleSpinBox(self.setup)
self.p1_accel_INPUT.setMaximum(99999.99)
self.p1_accel_INPUT.setObjectName("p1_accel_INPUT")
self.gridLayout.addWidget(self.p1_accel_INPUT, 1, 4, 1, 1)
self.p3_syringe_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.p3_syringe_DROPDOWN.setObjectName("p3_syringe_DROPDOWN")
self.gridLayout.addWidget(self.p3_syringe_DROPDOWN, 3, 1, 1, 1)
self.p3_speed_INPUT = QtWidgets.QDoubleSpinBox(self.setup)
self.p3_speed_INPUT.setDecimals(4)
self.p3_speed_INPUT.setMaximum(9999.999)
self.p3_speed_INPUT.setObjectName("p3_speed_INPUT")
self.gridLayout.addWidget(self.p3_speed_INPUT, 3, 3, 1, 1)
self.p1_units_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.p1_units_DROPDOWN.setObjectName("p1_units_DROPDOWN")
self.gridLayout.addWidget(self.p1_units_DROPDOWN, 1, 2, 1, 1)
self.p1_syringe_DROPDOWN = QtWidgets.QComboBox(self.setup)
self.p1_syringe_DROPDOWN.setObjectName("p1_syringe_DROPDOWN")
self.gridLayout.addWidget(self.p1_syringe_DROPDOWN, 1, 1, 1, 1)
self.label_16 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_16.setFont(font)
self.label_16.setObjectName("label_16")
self.gridLayout.addWidget(self.label_16, 0, 1, 1, 1)
self.label_20 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_20.setFont(font)
self.label_20.setObjectName("label_20")
self.gridLayout.addWidget(self.label_20, 0, 5, 1, 1)
self.label_2 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.label_18 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_18.setFont(font)
self.label_18.setObjectName("label_18")
self.gridLayout.addWidget(self.label_18, 0, 3, 1, 1)
self.label_17 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_17.setFont(font)
self.label_17.setObjectName("label_17")
self.gridLayout.addWidget(self.label_17, 0, 2, 1, 1)
self.p3_accel_INPUT = QtWidgets.QDoubleSpinBox(self.setup)
self.p3_accel_INPUT.setMaximum(99999.99)
self.p3_accel_INPUT.setObjectName("p3_accel_INPUT")
self.gridLayout.addWidget(self.p3_accel_INPUT, 3, 4, 1, 1)
self.label_4 = QtWidgets.QLabel(self.setup)
font = QtGui.QFont()
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
self.p1_setup_send_BTN = QtWidgets.QPushButton(self.setup)
self.p1_setup_send_BTN.setObjectName("p1_setup_send_BTN")
self.gridLayout.addWidget(self.p1_setup_send_BTN, 1, 6, 1, 1)
self.p2_setup_send_BTN = QtWidgets.QPushButton(self.setup)
self.p2_setup_send_BTN.setObjectName("p2_setup_send_BTN")
self.gridLayout.addWidget(self.p2_setup_send_BTN, 2, 6, 1, 1)
self.p3_setup_send_BTN = QtWidgets.QPushButton(self.setup)
self.p3_setup_send_BTN.setObjectName("p3_setup_send_BTN")
self.gridLayout.addWidget(self.p3_setup_send_BTN, 3, 6, 1, 1)
self.p1_setup_jog_delta_INPUT = QtWidgets.QComboBox(self.setup)
self.p1_setup_jog_delta_INPUT.setObjectName("p1_setup_jog_delta_INPUT")
self.gridLayout.addWidget(self.p1_setup_jog_delta_INPUT, 1, 5, 1, 1)
self.p2_setup_jog_delta_INPUT = QtWidgets.QComboBox(self.setup)
self.p2_setup_jog_delta_INPUT.setObjectName("p2_setup_jog_delta_INPUT")
self.gridLayout.addWidget(self.p2_setup_jog_delta_INPUT, 2, 5, 1, 1)
self.p3_setup_jog_delta_INPUT = QtWidgets.QComboBox(self.setup)
self.p3_setup_jog_delta_INPUT.setObjectName("p3_setup_jog_delta_INPUT")
self.gridLayout.addWidget(self.p3_setup_jog_delta_INPUT, 3, 5, 1, 1)
self.verticalLayout_13.addLayout(self.gridLayout)
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.connect_BTN = QtWidgets.QPushButton(self.setup)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.connect_BTN.sizePolicy().hasHeightForWidth())
self.connect_BTN.setSizePolicy(sizePolicy)
self.connect_BTN.setObjectName("connect_BTN")
self.horizontalLayout_7.addWidget(self.connect_BTN)
self.disconnect_BTN = QtWidgets.QPushButton(self.setup)
self.disconnect_BTN.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.disconnect_BTN.sizePolicy().hasHeightForWidth())
self.disconnect_BTN.setSizePolicy(sizePolicy)
self.disconnect_BTN.setObjectName("disconnect_BTN")
self.horizontalLayout_7.addWidget(self.disconnect_BTN)
self.send_all_BTN = QtWidgets.QPushButton(self.setup)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.send_all_BTN.sizePolicy().hasHeightForWidth())
self.send_all_BTN.setSizePolicy(sizePolicy)
self.send_all_BTN.setAcceptDrops(True)
self.send_all_BTN.setObjectName("send_all_BTN")
self.horizontalLayout_7.addWidget(self.send_all_BTN)
self.verticalLayout_13.addLayout(self.horizontalLayout_7)
self.verticalLayout_14.addLayout(self.verticalLayout_13)
self.experiment_notes = QtWidgets.QLineEdit(self.setup)
self.experiment_notes.setObjectName("experiment_notes")
self.verticalLayout_14.addWidget(self.experiment_notes)
self.tabWidget.addTab(self.setup, "")
self.rheo = QtWidgets.QWidget()
self.rheo.setObjectName("rheo")
self.gridLayout_4 = QtWidgets.QGridLayout(self.rheo)
self.gridLayout_4.setObjectName("gridLayout_4")
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem, 1, 1, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem1, 0, 0, 1, 1)
self.jfscanvas = QtWidgets.QWidget(self.rheo)
self.jfscanvas.setObjectName("jfscanvas")
self.gridLayout_2.addWidget(self.jfscanvas, 0, 1, 1, 1)
self.gridLayout_4.addLayout(self.gridLayout_2, 1, 0, 1, 1)
self.horizontalLayout_18 = QtWidgets.QHBoxLayout()
self.horizontalLayout_18.setObjectName("horizontalLayout_18")
self.label_9 = QtWidgets.QLabel(self.rheo)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_9.sizePolicy().hasHeightForWidth())
self.label_9.setSizePolicy(sizePolicy)
self.label_9.setObjectName("label_9")
self.horizontalLayout_18.addWidget(self.label_9)
self.rheo_port_comboBox = QtWidgets.QComboBox(self.rheo)
self.rheo_port_comboBox.setObjectName("rheo_port_comboBox")
self.horizontalLayout_18.addWidget(self.rheo_port_comboBox)
self.openRheo_btn = QtWidgets.QPushButton(self.rheo)
self.openRheo_btn.setObjectName("openRheo_btn")
self.horizontalLayout_18.addWidget(self.openRheo_btn)
self.closeRheo_btn = QtWidgets.QPushButton(self.rheo)
self.closeRheo_btn.setObjectName("closeRheo_btn")
self.horizontalLayout_18.addWidget(self.closeRheo_btn)
self.label_11 = QtWidgets.QLabel(self.rheo)
self.label_11.setObjectName("label_11")
self.horizontalLayout_18.addWidget(self.label_11)
self.comboBox_tb = QtWidgets.QComboBox(self.rheo)
self.comboBox_tb.setObjectName("comboBox_tb")
self.comboBox_tb.addItem("")
self.comboBox_tb.addItem("")
self.comboBox_tb.addItem("")
self.comboBox_tb.addItem("")
self.comboBox_tb.addItem("")
self.comboBox_tb.addItem("")
self.comboBox_tb.addItem("")
self.horizontalLayout_18.addWidget(self.comboBox_tb)
self.start_btn = QtWidgets.QPushButton(self.rheo)
self.start_btn.setObjectName("start_btn")
self.horizontalLayout_18.addWidget(self.start_btn)
self.stop_btn = QtWidgets.QPushButton(self.rheo)
self.stop_btn.setObjectName("stop_btn")
self.horizontalLayout_18.addWidget(self.stop_btn)
self.clearDisplay = QtWidgets.QPushButton(self.rheo)
self.clearDisplay.setObjectName("clearDisplay")
self.horizontalLayout_18.addWidget(self.clearDisplay)
self.checkBox = QtWidgets.QCheckBox(self.rheo)
self.checkBox.setObjectName("checkBox")
self.horizontalLayout_18.addWidget(self.checkBox)
self.label_12 = QtWidgets.QLabel(self.rheo)
self.label_12.setObjectName("label_12")
self.horizontalLayout_18.addWidget(self.label_12)
self.lineEdit = QtWidgets.QLineEdit(self.rheo)
self.lineEdit.setMaxLength(12)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout_18.addWidget(self.lineEdit)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_18.addItem(spacerItem2)
self.gridLayout_4.addLayout(self.horizontalLayout_18, 0, 0, 1, 1)
self.horizontalLayout_19 = QtWidgets.QHBoxLayout()
self.horizontalLayout_19.setObjectName("horizontalLayout_19")
self.label_21 = QtWidgets.QLabel(self.rheo)
self.label_21.setObjectName("label_21")
self.horizontalLayout_19.addWidget(self.label_21)
self.lineEdit_2 = QtWidgets.QLineEdit(self.rheo)
self.lineEdit_2.setMaximumSize(QtCore.QSize(50, 16777215))
self.lineEdit_2.setObjectName("lineEdit_2")
self.horizontalLayout_19.addWidget(self.lineEdit_2)
self.checkBox_2 = QtWidgets.QCheckBox(self.rheo)
self.checkBox_2.setObjectName("checkBox_2")
self.horizontalLayout_19.addWidget(self.checkBox_2)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_19.addItem(spacerItem3)
self.label_22 = QtWidgets.QLabel(self.rheo)
self.label_22.setObjectName("label_22")
self.horizontalLayout_19.addWidget(self.label_22)
self.comboBox = QtWidgets.QComboBox(self.rheo)
self.comboBox.setObjectName("comboBox")
self.horizontalLayout_19.addWidget(self.comboBox)
self.pushButton = QtWidgets.QPushButton(self.rheo)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout_19.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.rheo)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout_19.addWidget(self.pushButton_2)
self.checkBox_3 = QtWidgets.QCheckBox(self.rheo)
self.checkBox_3.setObjectName("checkBox_3")
self.horizontalLayout_19.addWidget(self.checkBox_3)
self.pushButton_3 = QtWidgets.QPushButton(self.rheo)
self.pushButton_3.setObjectName("pushButton_3")
self.horizontalLayout_19.addWidget(self.pushButton_3)
self.pushButton_4 = QtWidgets.QPushButton(self.rheo)
self.pushButton_4.setObjectName("pushButton_4")
self.horizontalLayout_19.addWidget(self.pushButton_4)
self.lineEdit_3 = QtWidgets.QLineEdit(self.rheo)
self.lineEdit_3.setMaxLength(60)
self.lineEdit_3.setObjectName("lineEdit_3")
self.horizontalLayout_19.addWidget(self.lineEdit_3)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_19.addItem(spacerItem4)
self.gridLayout_4.addLayout(self.horizontalLayout_19, 2, 0, 1, 1)
self.tabWidget.addTab(self.rheo, "")
self.verticalLayout.addWidget(self.tabWidget)
MainWindow.setCentralWidget(self.centralwidget)
self.status_bar_DISP = QtWidgets.QStatusBar(MainWindow)
self.status_bar_DISP.setObjectName("status_bar_DISP")
MainWindow.setStatusBar(self.status_bar_DISP)
self.menuBar = QtWidgets.QMenuBar(MainWindow)
self.menuBar.setGeometry(QtCore.QRect(0, 0, 1071, 26))
self.menuBar.setNativeMenuBar(False)
self.menuBar.setObjectName("menuBar")
self.menuFile = QtWidgets.QMenu(self.menuBar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menuBar)
self.load_settings_INPUT = QtWidgets.QAction(MainWindow)
self.load_settings_INPUT.setObjectName("load_settings_INPUT")
self.save_settings_INPUT = QtWidgets.QAction(MainWindow)
self.save_settings_INPUT.setObjectName("save_settings_INPUT")
self.load_settings_BTN = QtWidgets.QAction(MainWindow)
self.load_settings_BTN.setObjectName("load_settings_BTN")
self.save_settings_BTN = QtWidgets.QAction(MainWindow)
self.save_settings_BTN.setObjectName("save_settings_BTN")
self.menuFile.addAction(self.load_settings_BTN)
self.menuFile.addAction(self.save_settings_BTN)
self.menuBar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(3)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Poseidon Controller"))
self.label_6.setText(_translate("MainWindow", "Pump 2"))
self.label_56.setText(_translate("MainWindow", "Incremental"))
self.label_8.setText(_translate("MainWindow", "Pump 1"))
self.label_57.setText(_translate("MainWindow", "Remain"))
self.label_58.setText(_translate("MainWindow", "Absolute"))
self.label_25.setText(_translate("MainWindow", "Pump 3"))
self.p2_units_LABEL_2.setText(_translate("MainWindow", "[units]"))
self.p3_units_LABEL_2.setText(_translate("MainWindow", "[units]"))
self.p1_units_LABEL_2.setText(_translate("MainWindow", "[units]"))
self.label_14.setText(_translate("MainWindow", "Pump 2"))
self.label_15.setText(_translate("MainWindow", "Pump 3"))
self.label_24.setText(_translate("MainWindow", "Speed"))
self.p1_units_LABEL.setText(_translate("MainWindow", "[units]"))
self.p3_syringe_LABEL.setText(_translate("MainWindow", "syringe"))
self.p2_units_LABEL.setText(_translate("MainWindow", "[units]"))
self.label_13.setText(_translate("MainWindow", "Pump 1"))
self.label_27.setText(_translate("MainWindow", "Syringe"))
self.p3_units_LABEL.setText(_translate("MainWindow", "[units]"))
self.p2_syringe_LABEL.setText(_translate("MainWindow", "syringe"))
self.p1_syringe_LABEL.setText(_translate("MainWindow", "syringe"))
self.label_10.setText(_translate("MainWindow", "Amount "))
self.run_BTN.setText(_translate("MainWindow", "Run"))
self.pause_BTN.setText(_translate("MainWindow", "Pause"))
self.zero_BTN.setText(_translate("MainWindow", "Zero"))
self.stop_BTN.setText(_translate("MainWindow", "STOP"))
self.jog_plus_BTN.setText(_translate("MainWindow", "Jog +"))
self.jog_minus_BTN.setText(_translate("MainWindow", "Jog -"))
self.label_43.setText(_translate("MainWindow", "Coord."))
self.absolute_RADIO.setText(_translate("MainWindow", "Abs."))
self.incremental_RADIO.setText(_translate("MainWindow", "Incr."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.control), _translate("MainWindow", "Syringe Control"))
self.camera_connect_BTN.setText(_translate("MainWindow", "Connect"))
self.camera_disconnect_BTN.setText(_translate("MainWindow", "Disconnect"))
self.camera_capture_image_BTN.setText(_translate("MainWindow", "Capture Image"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.camera), _translate("MainWindow", "Camera"))
self.label_7.setText(_translate("MainWindow", "Select port:"))
self.refresh_ports_BTN.setText(_translate("MainWindow", "Refresh ports"))
self.label_5.setText(_translate("MainWindow", "Set Microstepping:"))
self.label_19.setText(_translate("MainWindow", "Accel"))
self.label_16.setText(_translate("MainWindow", "Syringe"))
self.label_20.setText(_translate("MainWindow", "Jog Delta"))
self.label_2.setText(_translate("MainWindow", "Pump 1"))
self.label_3.setText(_translate("MainWindow", "Pump 2"))
self.label_18.setText(_translate("MainWindow", "Speed"))
self.label_17.setText(_translate("MainWindow", "Units"))
self.label_4.setText(_translate("MainWindow", "Pump 3"))
self.p1_setup_send_BTN.setText(_translate("MainWindow", "Send"))
self.p2_setup_send_BTN.setText(_translate("MainWindow", "Send"))
self.p3_setup_send_BTN.setText(_translate("MainWindow", "Send"))
self.connect_BTN.setText(_translate("MainWindow", "Connect to Controller"))
self.disconnect_BTN.setText(_translate("MainWindow", "Disconnect from Controller"))
self.send_all_BTN.setText(_translate("MainWindow", "Send all settings"))
self.experiment_notes.setPlaceholderText(_translate("MainWindow", "Write notes about your experiment here. These will be appended to the end of your settings file."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.setup), _translate("MainWindow", "Setup"))
self.label_9.setText(_translate("MainWindow", "Port"))
self.openRheo_btn.setText(_translate("MainWindow", "open port"))
self.closeRheo_btn.setText(_translate("MainWindow", "close port"))
self.label_11.setText(_translate("MainWindow", "Timebase [ms]"))
self.comboBox_tb.setCurrentText(_translate("MainWindow", "50"))
self.comboBox_tb.setItemText(0, _translate("MainWindow", "1"))
self.comboBox_tb.setItemText(1, _translate("MainWindow", "5"))
self.comboBox_tb.setItemText(2, _translate("MainWindow", "10"))
self.comboBox_tb.setItemText(3, _translate("MainWindow", "50"))
self.comboBox_tb.setItemText(4, _translate("MainWindow", "100"))
self.comboBox_tb.setItemText(5, _translate("MainWindow", "500"))
self.comboBox_tb.setItemText(6, _translate("MainWindow", "1000"))
self.start_btn.setText(_translate("MainWindow", "start"))
self.stop_btn.setText(_translate("MainWindow", "stop"))
self.clearDisplay.setText(_translate("MainWindow", "clear display"))
self.checkBox.setText(_translate("MainWindow", "Test Run"))
self.label_12.setText(_translate("MainWindow", "set Freqency"))
self.label_21.setText(_translate("MainWindow", "limit for stop flow"))
self.checkBox_2.setText(_translate("MainWindow", "check the limit"))
self.label_22.setText(_translate("MainWindow", "Rheo Port"))
self.pushButton.setText(_translate("MainWindow", "open port"))
self.pushButton_2.setText(_translate("MainWindow", "close port"))
self.checkBox_3.setText(_translate("MainWindow", "load"))
self.pushButton_3.setText(_translate("MainWindow", "Home"))
self.pushButton_4.setText(_translate("MainWindow", "inject.."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.rheo), _translate("MainWindow", "Counter"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.load_settings_INPUT.setText(_translate("MainWindow", "Load settings"))
self.save_settings_INPUT.setText(_translate("MainWindow", "Save settings"))
self.load_settings_BTN.setText(_translate("MainWindow", "Load settings"))
self.save_settings_BTN.setText(_translate("MainWindow", "Save settings"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

1609
poseidon_controller_gui2.ui Normal file

File diff suppressed because it is too large Load Diff

1530
poseidon_main.py Normal file

File diff suppressed because it is too large Load Diff

250
show_html.py Normal file
View File

@ -0,0 +1,250 @@
import sys,os
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
web =QWebEngineView()
#web.load(QUrl('http://192.168.2.242:8000/'))
script_dir = os.path.dirname(__file__)
file_path = os.path.join(script_dir, 'test.html')
with open(file_path,encoding="UTF-8") as f:
html = f.read()
print(file_path)
web.load(QUrl.fromLocalFile(file_path))
web.show()
sys.exit(app.exec_())
# import pandas as pd
# from bokeh import plotting, embed, resources
# from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
# import os
# class Widget(QtWidgets.QWidget):
# def __init__(self, parent=None):
# super(Widget, self).__init__(parent)
# button = QtWidgets.QPushButton("Submit")
# saveit = QtWidgets.QPushButton('save')
# self.m_output = QtWebEngineWidgets.QWebEngineView()
# button.clicked.connect(self.on_button_clicked)
# saveit.clicked.connect(self.do_save)
# lay = QtWidgets.QVBoxLayout(self)
# lay.addWidget(button)
# lay.addWidget(saveit)
# lay.addWidget(self.m_output)
# self.resize(640, 480)
# @QtCore.pyqtSlot()
# def do_save(self):
# p = plotting.figure(plot_width=300, plot_height=300)
# data = {"Day": [0, 1, 2, 3, 0, 1], "Num": [0, 0, 1, 1, 2, 3]}
# df = pd.DataFrame(data)
# p.hexbin(df.Day, df.Num, size=0.5)
# html = embed.file_html(p, resources.CDN, "my plot")
# script_dir = os.path.dirname(__file__)
# file_path = os.path.join(script_dir, './test.html')
# with open(file_path,'w',encoding='utf_8') as f:
# f.write(html)
# print(html)
# self.m_output.setHtml(html)
# @QtCore.pyqtSlot()
# def on_button_clicked(self):
# # p = plotting.figure(plot_width=300, plot_height=300)
# # data = {"Day": [0, 1, 2, 3, 0, 1], "Num": [0, 0, 1, 1, 2, 3]}
# # df = pd.DataFrame(data)
# # p.hexbin(df.Day, df.Num, size=0.5)
# # html = embed.file_html(p, resources.CDN, "my plot")
# # self.m_output.setHtml(html)
# #self.m_output.setContent(html,"text/html;charset=UTF-8","")
# # html =''
# # script_dir = os.path.dirname(__file__)
# # file_path = os.path.join(script_dir, './test.html')
# # with open(file_path,encoding="UTF-8") as f:
# # html = f.read()
# # print(html)
# self.m_output.load(QtCore.QUrl('https://t-online.de'))
# if __name__ == "__main__":
# import sys
# app = QtWidgets.QApplication(sys.argv)
# w = Widget()
# w.show()
# sys.exit(app.exec_())
# from PyQt5.QtWidgets import QApplication
# from PyQt5.QtWebEngineWidgets import QWebEngineView
# from PyQt5.QtWebChannel import QWebChannel
# from PyQt5.QtCore import QObject, pyqtSlot, QUrl, QVariant
# import os
# class CallHandler(QObject):
# @pyqtSlot(result=QVariant)
# def test(self):
# print('call received')
# return QVariant({"abc": "def", "ab": 22})
# # take an argument from javascript - JS: handler.test1('hello!')
# @pyqtSlot(QVariant, result=QVariant)
# def test1(self, args):
# print('i got')
# print(args)
# return "ok"
# class WebView(QWebEngineView):
# def __init__(self):
# super(WebView, self).__init__()
# self.channel = QWebChannel()
# self.handler = CallHandler()
# self.channel.registerObject('handler', self.handler)
# self.page().setWebChannel(self.channel)
# file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "test.html"))
# local_url = QUrl.fromLocalFile(file_path)
# self.load(local_url)
# if __name__ == "__main__":
# app = QApplication([])
# view = WebView()
# view.show()
# app.exec_()
# from bokeh.plotting import figure, show
# # prepare some data
# x = [1, 2, 3, 4, 5]
# y = [6, 7, 2, 4, 5]
# # create a new plot with a title and axis labels
# p = figure(title="Simple line example", x_axis_label="x", y_axis_label="y")
# # add a line renderer with legend and line thickness
# p.line(x, y, legend_label="Temp.", line_width=2)
# # show the results
# show(p)
# import sys
# from pathlib import Path
# from PyQt5 import QAxContainer
# from PyQt5.QtCore import Qt
# from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLineEdit, QApplication
# import sys
# from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
# from PyQt5.QtWebEngineWidgets import QWebEngineView
# from PyQt5.QtCore import pyqtSlot
# from bokeh.layouts import column
# from bokeh.models import ColumnDataSource, CustomJS, Slider
# from bokeh.plotting import Figure, output_file
# from bokeh.embed import file_html
# from bokeh.resources import CDN
# class App(QWidget):
# def __init__(self):
# super().__init__()
# self.resize(500, 500)
# self.initUI()
# def initUI(self):
# button = QPushButton('start', self)
# button.move(100, 70)
# button.clicked.connect(self.on_click)
# self.layout = QVBoxLayout()
# self.layout1 = QVBoxLayout()
# self.layout1.addWidget(button)
# self.layout2 = QVBoxLayout()
# self.layout.addLayout(self.layout1)
# self.layout.addLayout(self.layout2)
# self.setLayout(self.layout)
# self.show()
# @pyqtSlot()
# def on_click(self):
# print('PyQt5 button click')
# self.m_output = QWebEngineView()
# self.layout2.addWidget(self.m_output)
# #html_file = self.bokeh_function()
# html_file = self.test_html()
# self.m_output.setHtml(html_file)
# self.m_output.show()
# def bokeh_function(self):
# # taken from https://docs.bokeh.org/en/latest/docs/user_guide/interaction/callbacks.html
# output_file("js_on_change.html")
# x = [x * 0.005 for x in range(0, 200)]
# y = x
# source = ColumnDataSource(data=dict(x=x, y=y))
# plot = Figure(width=400, height=400)
# plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)
# callback = CustomJS(args=dict(source=source), code="""
# const data = source.data;
# const f = cb_obj.value
# const x = data['x']
# const y = data['y']
# for (let i = 0; i < x.length; i++) {
# y[i] = Math.pow(x[i], f)
# }
# source.change.emit();
# """)
# slider = Slider(start=0.1, end=4, value=1, step=.1, title="power")
# slider.js_on_change('value', callback)
# layout = column(slider, plot)
# html = file_html(layout, CDN, "my plot")
# return html
# def test_html(self):
# html = '<html><head><meta charset="utf-8" />'
# html += '<script src="{}"></script></head>'
# html += '<body>'
# #html += plotly.offline.plot(fig, include_plotlyjs=False, output_type='div')
# html += 'Hi there!'
# html += '</body></html>'
# return html
# if __name__ == '__main__':
# app = QApplication(sys.argv)
# ex = App()
# sys.exit(app.exec_())

38
systemHtml.py Normal file
View File

@ -0,0 +1,38 @@
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage
from PyQt5.QtGui import QDesktopServices
import os
import sys
class CustomWebEnginePage(QWebEnginePage):
""" Custom WebEnginePage to customize how we handle link navigation """
# Store external windows.
external_windows = []
def acceptNavigationRequest(self, url, _type, isMainFrame):
if (_type == QWebEnginePage.NavigationTypeLinkClicked and
url.host() != 'next.jefro.de'):
# Send the URL to the system default URL handler.
QDesktopServices.openUrl(url)
return False
return super().acceptNavigationRequest(url, _type, isMainFrame)
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.browser = QWebEngineView()
self.browser.setPage(CustomWebEnginePage(self))
self.browser.setUrl(QUrl("https://next.jefro.de/"))
self.setCentralWidget(self.browser)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

52
test.html Normal file

File diff suppressed because one or more lines are too long

21
test_settings.txt Normal file
View File

@ -0,0 +1,21 @@
File name: /Users/sinabooeshaghi/Dropbox (Personal)/Caltech/Research/Syringe Pump/poseidon/SOFTWARE/test_settings.txt
Date time: 2018-12-03 15_39_08
:================================
P1 Syrin: BD 60 mL
P1 Units: ml/s
P1 Speed: 0.02
P1 Accel: 5.0
P1 Jog D: 1.0
:================================
P2 Syrin: BD 60 mL
P2 Units: ml/s
P2 Speed: 0.02
P2 Accel: 5.0
P2 Jog D: 1.0
:================================
P3 Syrin: BD 60 mL
P3 Units: ml/s
P3 Speed: 0.02
P3 Accel: 5.0
P3 Jog D: 1.0
Exp Note: