Hardware components | ||||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
Software apps and online services | ||||||
| ||||||
| ||||||
| ||||||
| ||||||
| ||||||
| ||||||
Hand tools and fabrication machines | ||||||
|
Investigating biological processes often requires model systems that mimic naturally occurring physiological environments. Many animal models and cell lines have served as gold standard tools for biomedical researchers to investigate biological functions in laboratories. Yet, many vital bio-activities such as hormones production rely on fluid dynamics to propagate signalling molecules at the right place and time throughout the body. In investigating such long-range communication mechanisms, a need exist to precisely mimic and control physiological fluid environments in laboratory settings. As a result, many commercial pumping systems are now available:
Yet, commercial solutions come highly expensive and are difficult to customize based on application requirements. As a result, various low-cost open source solutions have recently emerged in the literature:
Although being low cost and easily customizable, open-source solutions lack an intuitive user interface allowing to easily adjust pumping parameters without modifying the underlying source code of the system.
The present project aims to improve the design of the PiFlow system by designing a graphical user interface to be displayed on an LCD touch screen display to adjust flow rate parameters easily. Specifically, the interface will allow the user to select between three different modes. The static flow mode will allow setting a constant flow rate (uL/Min) to be executed for a pre-defined flow time (Sec). The dynamic flow mode will allow the user to select a range of flow rate values where the system will linearly adjust the pumping rate (uL/Min) following a pre-defined sweep rate (uL/Min) adjustable through the interface. Lastly, for applications requiring higher complexity, a custom mode will allow the upload of a CSV file containing a list of flow rate parameters to be executed by the system. The underlying code of the interface will be made available for modification and improvement on the Github Project Page. Overall, the interface serves as a first design iteration utilizable in various microfluidic open source systems.
from PyQt5.QtCore import pyqtSlot, QSize
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QInputDialog, QFileDialog
from .Ui_window import Ui_MainWindow
import sys
import time
import RPi.GPIO as GPIO
import numpy as np
import os
import csv
# Hardware Pin Assignment
GPIO.setmode(GPIO.BCM) ##Use GPIO Pin Reference
logic_switch_pumpA = 17 ##Hardware pin 11 - GPIO 17 --> Turning switch IC A OPEN/CLOSE
logic_switch_pumpB = 27 ##Hardware pin 13 - GPIO 27 --> Turning switch IC B OPEN/CLOSE
frequency_PIN_pumpA = 13 ##Hardware pin 33 - GPIO 13 --> Adjust pump_A driving frequency
frequency_PIN_pumpB = 12 ##Hardware pin 32 - GPIO 12 --> Adjust pump_B driving frequency
# Function converting flow rate values (uL/Min) to frequency values (Hz)
def flowRate_convert(flow_rate):
if (flow_rate < 8.0):
driving_frequency = 1
elif (flow_rate > 12000.0):
driving_frequency = 1
else:##Convert flow rate (uL/min) to frequency (Hz)
driving_frequency = flow_rate * 2
# Derive required PWM frequency to produce desired flow rate output
# Pump driving frequency = 0 - 300 Hertz
# Driver default output frequency = 200 Hertz
# Driver output frequency control with quadruplicated (4X) input frequency = 50 - 800 Hz
## for 300 Hz driver output --> 300*4 = 1200 Hz PWM 50% duty is required
## for 200 Hz driver output --> 200*4 = 800 Hz PWM 50% duty is required
# 1) Derive required driver output frequency (Hz) from desired flow rate (uL/Min)
##driver_output = 199 + (-386*flow_rate) + (331* pow(flow_rate, 2)) + (- 106 * pow(flow_rate, 3)) + (17.1* pow(flow_rate, 4)) + (-1.36 * pow(flow_rate, 5)) + (0.0417 * pow(flow_rate, 6))
#2) Derive required drive input frequency (Hz) from desired output frequency (Hz)
##driving_frequency = 997 + (-8.67*driver_output) + (0.0575 * pow(driver_output, 2)) + ((-7.26 * pow(10, -5)) * pow(driver_output, 3)) + ((3.05 * pow(10, -8)) * pow(driver_output, 4))
return driving_frequency
class ON_OFF_RESPONSES(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(ON_OFF_RESPONSES, self).__init__(parent)
self.setupUi(self)
# STATIC PARAMETERS
self.run_time_pA = 0
self.run_time_pB = 0
self.flowRate_pumpA = 0
self.flowRate_pumpB = 0
self.driving_frequency_pumpA = 0 ##flowRate_convert(self.flowRate_pumpA)
self.driving_frequency_pumpB = 0 ##flowRate_convert(self.flowRate_pumpB)
self.duty_cycle_pA = 0
self.duty_cycle_pB = 0
#FLOW MODE PARAMETERS
self.customFlow_pumpB = False
self.customFlow_pumpA = False
self.staticFlow_pumpA = False
self.staticFlow_pumpB = False
self.dynamicFlow_pumpA = False
self.dynamicFlow_pumpB = False
# DYNAMIC PARAMETERS
self.dynamic_sweepRate_pumpB = 0
self.flowRate_end_pumpB = 0
self.flowRate_start_pumpB = 0
self.dynamic_sweepRate_pumpA = 0
self.flowRate_start_pumpA = 0
self.flowRate_end_pumpA = 0
#CUSTOM PARAMETERS
self.custom_flowRate_values_pA = [] ##List to store values from CSV file
self.custom_flowRate_values_pB = [] ##List to store values from CSV file
# ================ ON / OFF BUTTONS ==================
#ON BUTTON PUMP_A
@pyqtSlot()
def on_ON_btn_pumpA_clicked(self):
#Pin State Assignment
GPIO.setmode(GPIO.BCM) ##Use GPIO Pin
GPIO.setup(logic_switch_pumpA, GPIO.OUT)
GPIO.setup(frequency_PIN_pumpA, GPIO.OUT)
# Derive and define driving frequencies (Hz) from flow rate input (uL/Min)
driving_frequency_pumpA = flowRate_convert(self.flowRate_pumpA) ##Hertz (Driver = 4x pump freq)
dynamic_start_frequency_pA = flowRate_convert(self.flowRate_start_pumpA)
dynamic_end_frequency_pA = flowRate_convert(self.flowRate_end_pumpA)
##dynamic_sweepRate_pumpA = flowRate_convert(self.dynamic_sweepRate_pumpA)
duty_cycle_pA = 50 ## %
#Define possible flow modes
staticMode = (self.staticFlow_pumpA == True and self.dynamicFlow_pumpA == False and self.customFlow_pumpA == False)
dynamicMode = (self.staticFlow_pumpA == False and self.dynamicFlow_pumpA == True and self.customFlow_pumpA == False)
customMode = (self.staticFlow_pumpA == False and self.dynamicFlow_pumpA == False and self.customFlow_pumpA == True)
#Flow Mode Condition
if (staticMode):
#Condition handling out of range flow rate values
if ((self.flowRate_pumpA < 8.0) or (self.flowRate_pumpA > 12000.0)):
#Error message pop-up
msg = QMessageBox()
msg.setWindowTitle("---> FLOW RATE OUT OF RANGE <---")
msg.setText("-----> THE FLOW RATE MUST BE BETWEEN 8 - 12 000 uL/Min <-----")
msg.setInformativeText("Information regarding flow range scope can be found below.")
msg.setDetailedText("mp6-liq piezoelectric pump: \n\n Liquids flow range: 8 - 12 000 uL/Min \n\n Typical flow rate: 8 mL/Min \n\n Typical back pressure: 600 mbar @ 100Hz, 250 Vpp \n\n *** Review datasheet for further information. \n\n ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Warning) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Retry) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Retry)
x = msg.exec_()
self.flowRate_pumpA = 0
#Drive the pumps according to selected parameters
else:
GPIO.output(logic_switch_pumpA, GPIO.HIGH)
frequency_ON_pumpA = GPIO.PWM(frequency_PIN_pumpA, driving_frequency_pumpA)
#Set 100% progress bar to the total run time entered
self.progressBar_staticFlow_pumpA.setMaximum(self.run_time_pA)
progressBar_staticFlowA_index = 0
#Turn pumping ON
frequency_ON_pumpA.start(duty_cycle_pA)
#Iterate until run_time_pA value is reached
for i in np.arange(self.run_time_pA):
progressBar_staticFlowA_index +=1
time.sleep(1)
self.progressBar_staticFlow_pumpA.setValue(progressBar_staticFlowA_index)
#Stop pumping frequency
frequency_ON_pumpA.stop()
#Static mode terminated pop up message
msg = QMessageBox()
msg.setWindowTitle("COMPLETED")
msg.setInformativeText(" PREDEFINED STATIC FLOW TERMINATED \n\n PRESS OFF TO STOP PUMPING ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Information) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Ok) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Ok)
x = msg.exec_()
elif (dynamicMode):
#Condition handling out of range flow rate values
if ((self.flowRate_start_pumpA < 8.0) or (self.flowRate_end_pumpA >12000.0)):
#Error message pop-up
msg = QMessageBox()
msg.setWindowTitle("---> FLOW RATE OUT OF RANGE <---")
msg.setText("-----> THE FLOW RATE MUST BE BETWEEN 8 - 12 000 uL / Min <-----")
msg.setInformativeText("Information regarding flow range scope can be found below.")
msg.setDetailedText("mp6-liq piezoelectric pump: \n\n Liquids flow range: 8 - 12 000 uL/Min \n\n Typical flow rate: 8 mL/Min \n\n Typical back pressure: 600 mbar @ 100Hz, 250 Vpp \n\n *** Review datasheet for further information. \n\n ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Warning) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Retry) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Retry)
x = msg.exec_()
self.flowRate_start_pumpA = 0
self.flowRate_end_pumpA = 0
#Drive the pumps according to selected parameters
else:
GPIO.output(logic_switch_pumpA, GPIO.HIGH)
frequency_ON_pumpA = GPIO.PWM(frequency_PIN_pumpA, dynamic_start_frequency_pA)
#Define a range of frequencies from the input
frequency_range = np.arange(dynamic_start_frequency_pA, dynamic_end_frequency_pA, self.dynamic_sweepRate_pumpA)
#Set 100% progress to the total frequency values to be iterated upon
self.progressBar_dynamicFlow_pumpA.setMaximum(len(frequency_range))
progressBar_dynamicFlowA_index = 0
# Iterate through frequency_range following dynamic_sweepRate_pumpA
frequency_ON_pumpA.start(duty_cycle_pA)
for n in frequency_range:
progressBar_dynamicFlowA_index +=1
time.sleep(1)
frequency_ON_pumpA.ChangeFrequency(n)
self.progressBar_dynamicFlow_pumpA.setValue(progressBar_dynamicFlowA_index)
#Stop pumping frequency
frequency_ON_pumpA.stop()
#Dynamic mode terminated pop-up message
msg = QMessageBox()
msg.setWindowTitle("COMPLETED")
msg.setInformativeText(" DYNAMIC FLOW TERMINATED \n\n PRESS OFF TO STOP PUMPING ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Information) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Ok) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Ok)
x = msg.exec_()
elif(customMode):
GPIO.output(logic_switch_pumpA, GPIO.HIGH)
frequency_ON_pumpA = GPIO.PWM(frequency_PIN_pumpA, flowRate_convert(self.custom_flowRate_values_pA[0]))
#Set 100% progress bar value to the number of values contained in the CSV file
self.progressBar_customFlow_pumpA.setMaximum(len(self.custom_flowRate_values_pA))
progressBar_customFlowA_index = 0
#Initiate pumping and iterate through all flow rate values parsed from the CSV file
frequency_ON_pumpA.start(duty_cycle_pA)
for n in self.custom_flowRate_values_pA:
progressBar_customFlowA_index +=1
time.sleep(1)
frequency_ON_pumpA.ChangeFrequency(flowRate_convert(n))
self.progressBar_customFlow_pumpA.setValue(progressBar_customFlowA_index)
#Terminate custom pumping frequency
frequency_ON_pumpA.stop()
#Custom mode terminated message
msg = QMessageBox()
msg.setWindowTitle("COMPLETED")
msg.setInformativeText(" CUSTOM FLOW TERMINATED \n\n PRESS OFF TO STOP PUMPING ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Information) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Ok) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Ok)
x = msg.exec_()
#Condition handling invalid flow mode selection
else:
#Error message pop-up
msg = QMessageBox()
msg.setWindowTitle("---> INVALID FLOW MODE <---")
msg.setText("-----> ONE FLOW MODE MUST BE SELECTED <-----")
msg.setInformativeText(" Details regarding the flow modes available can be found below. ")
msg.setDetailedText("\n STATIC FLOW MODE: Constant flow rate (uL / Min) during a pre-defined time period (Sec). \n\n DYNAMIC FLOW MODE: Constant change of flow rate within a pre-define range of values following a desired sweep rate (uL/Min). \n\n CUSTOM FLOW MODE: Flow rate output follows complex periodic functions uploaded via CSV file. \n\n")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Critical) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Retry) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Retry)
x = msg.exec_()
#OFF BUTTON PUMP_A
@pyqtSlot()
def on_OFF_btn_pumpA_clicked(self):
driving_frequency_pumpA = flowRate_convert(self.flowRate_pumpA)
GPIO.setmode(GPIO.BCM) ##Use GPIO Pin
GPIO.setup(logic_switch_pumpA, GPIO.OUT)
GPIO.setup(frequency_PIN_pumpA, GPIO.OUT)
#Turn OFF switch IC Logic Pin
GPIO.output(logic_switch_pumpA, GPIO.LOW)
#Turn OFF frequency pin
frequency_ON_pumpA = GPIO.PWM(frequency_PIN_pumpA, driving_frequency_pumpA)
frequency_ON_pumpA.stop()
#Clean up pins
GPIO.cleanup((logic_switch_pumpA, frequency_PIN_pumpA))
#Reset progress bar to 0% + flow modes to default
if (self.staticFlow_pumpA == True):
self.progressBar_staticFlow_pumpA.setValue(0)
self.staticFlow_pumpA = False
#self.flow_rate_pumpA.setValue(0.00)
#self.run_time_pumpA.setValue(0.00)
elif (self.dynamicFlow_pumpA == True):
self.progressBar_dynamicFlow_pumpA.setValue(0)
self.dynamicFlow_pumpA = False
#self.flowRate_start_pumpA.setValue(0.00)
#self.flowRate_end_pumpA.setValue(0.00)
#self.dynamic_sweepRate_pumpA.setValue(0.00)
elif (self.customFlow_pumpA == True):
self.progressBar_customFlow_pumpA.setValue(0)
self.dynamicFlow_pumpA = False
#ON BUTTON PUMP_B
@pyqtSlot()
def on_ON_btn_pumpB_clicked(self):
GPIO.setmode(GPIO.BCM) ##Use GPIO Pin
GPIO.setup(frequency_PIN_pumpB, GPIO.OUT)
GPIO.setup(logic_switch_pumpB, GPIO.OUT)
# Derive & define pumping frequencies (Hz) from fow rate input (uL/Min)
driving_frequency_pumpB = flowRate_convert(self.flowRate_pumpB) ##Hertz (Driver = 4x pump freq)
dynamic_start_frequency_pB = flowRate_convert(self.flowRate_start_pumpB)
dynamic_end_frequency_pB = flowRate_convert(self.flowRate_end_pumpB)
##dynamic_sweepRate_pumpB= flowRate_convert(self.dynamic_sweepRate_pumpB)
duty_cycle_pB = 50 ## %
#Define available flow modes
staticMode = (self.staticFlow_pumpB == True and self.dynamicFlow_pumpB == False and self.customFlow_pumpB == False)
dynamicMode = (self.staticFlow_pumpB == False and self.dynamicFlow_pumpB == True and self.customFlow_pumpB == False)
customMode = (self.staticFlow_pumpB == False and self.dynamicFlow_pumpB == False and self.customFlow_pumpB == True)
if (staticMode):
#Condition handling out of range flow rate input
if ((self.flowRate_pumpB < 8.0) or (self.flowRate_pumpB > 12000.0)):
#Error message pop-up
msg = QMessageBox()
msg.setWindowTitle("---> FLOW RATE OUT OF RANGE <---")
msg.setText("-----> THE FLOW RATE MUST BE BETWEEN 8 - 12 000 uL/Min <-----")
msg.setInformativeText("Information regarding flow range scope can be found below.")
msg.setDetailedText("mp6-liq piezoelectric pump: \n\n Liquids flow range: 8 - 12 000 uL/Min \n\n Typical flow rate: 8 mL/Min \n\n Typical back pressure: 600 mbar @ 100Hz, 250 Vpp \n\n *** Review datasheet for further information. \n\n ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Warning) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Retry) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Retry)
x = msg.exec_()
self.flowRate_pumpB = 0
#Drive the pump according to the parameters selected
else:
GPIO.output(logic_switch_pumpB, GPIO.HIGH)
frequency_ON_pumpB = GPIO.PWM(frequency_PIN_pumpB, driving_frequency_pumpB)
#Set 100% progress bar value to total run time selected
self.progressBar_staticFlow_pumpB.setMaximum(self.run_time_pB)
progressBar_staticFlowB_index = 0
#Initiate pumping until total run time has been reached
frequency_ON_pumpB.start(duty_cycle_pB)
for i in np.arange(self.run_time_pB):
progressBar_staticFlowB_index +=1
time.sleep(1)
self.progressBar_staticFlow_pumpB.setValue(progressBar_staticFlowB_index)
#Terminate pumping frequency
frequency_ON_pumpB.stop()
#Static terminated message
msg = QMessageBox()
msg.setWindowTitle("COMPLETED")
msg.setInformativeText(" PREDEFINED STATIC FLOW TERMINATED \n\n PRESS OFF TO STOP PUMPING ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Information) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Ok) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Ok)
x = msg.exec_()
elif (dynamicMode):
#Condition handling out of range flow rate input
if ((self.flowRate_start_pumpB < 8.0) or (self.flowRate_end_pumpB >12000.0)):
#Error message pop-up
msg = QMessageBox()
msg.setWindowTitle("---> FLOW RATE OUT OF RANGE <---")
msg.setText("-----> THE FLOW RATE MUST BE BETWEEN 8 - 12 000 uL / Min <-----")
msg.setInformativeText("Information regarding flow range scope can be found below.")
msg.setDetailedText("mp6-liq piezoelectric pump: \n\n Liquids flow range: 8 - 12 000 uL/Min \n\n Typical flow rate: 8 mL/Min \n\n Typical back pressure: 600 mbar @ 100Hz, 250 Vpp \n\n *** Review datasheet for further information. \n\n ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Warning) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Retry) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Retry)
x = msg.exec_()
self.flowRate_start_pumpB = 0
self.flowRate_end_pumpB = 0
#Initiate pumping according to the parameters selected
else:
GPIO.output(logic_switch_pumpB, GPIO.HIGH)
frequency_ON_pumpB = GPIO.PWM(frequency_PIN_pumpB, dynamic_start_frequency_pB)
#Define the range of frequencies to be iterated upon
frequency_range = np.arange(dynamic_start_frequency_pB, dynamic_end_frequency_pB, self.dynamic_sweepRate_pumpB)
#Set 100% progress bar value to the total number of frequency values
self.progressBar_dynamicFlow_pumpB.setMaximum(len(frequency_range))
progressBar_dynamicFlowB_index = 0
# Iterate through frequency_range following dynamic_sweepRate_pumpA
frequency_ON_pumpB.start(duty_cycle_pB)
for n in frequency_range:
progressBar_dynamicFlowB_index +=1
time.sleep(1)
frequency_ON_pumpB.ChangeFrequency(n)
self.progressBar_dynamicFlow_pumpB.setValue(progressBar_dynamicFlowB_index)
#Terminate pumping frequency
frequency_ON_pumpB.stop()
#Dynamic mode terminated message
msg = QMessageBox()
msg.setWindowTitle("COMPLETED")
msg.setInformativeText(" DYNAMIC FLOW TERMINATED \n\n PRESS OFF TO STOP PUMPING ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Information) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Ok) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Ok)
x = msg.exec_()
elif(customMode):
GPIO.output(logic_switch_pumpB, GPIO.HIGH)
frequency_ON_pumpB = GPIO.PWM(frequency_PIN_pumpB, flowRate_convert(self.custom_flowRate_values_pB[0]))
#Set 100% progress bar value to the total number of flow rate value parsed in the CSV file
self.progressBar_customFlow_pumpB.setMaximum(len(self.custom_flowRate_values_pB))
progressBar_customFlowB_index = 0
#Initiate pumping following the range of values parsed in the CSV file
frequency_ON_pumpB.start(duty_cycle_pB)
for n in self.custom_flowRate_values_pB:
progressBar_customFlowB_index += 1
time.sleep(1)
frequency_ON_pumpB.ChangeFrequency(flowRate_convert(n))
self.progressBar_customFlow_pumpB.setValue(progressBar_customFlowB_index)
#Terminate pumping frequency
frequency_ON_pumpB.stop()
#Custom mode terminated message
msg = QMessageBox()
msg.setWindowTitle("COMPLETED")
msg.setInformativeText(" CUSTOM FLOW TERMINATED \n\n PRESS OFF TO STOP PUMPING ")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Information) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Ok) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Ok)
x = msg.exec_()
#Condition handling invalid flow mode selections
else:
#Error message pop-up
msg = QMessageBox()
msg.setWindowTitle("---> INVALID FLOW MODE <---")
msg.setText("-----> ONE FLOW MODE MUST BE SELECTED <-----")
msg.setInformativeText(" Details regarding the flow modes available can be found below. ")
msg.setDetailedText("\n STATIC FLOW MODE: Constant flow rate (uL / Min) during a pre-defined time period (Sec). \n\n DYNAMIC FLOW MODE: Constant change of flow rate within a pre-define range of values following a desired sweep rate (uL/Min). \n\n CUSTOM FLOW MODE: Flow rate output follows complex periodic functions uploaded via CSV file. \n\n")
msg.setStyleSheet("background-color: rgb(114, 159, 207);")
msg.setIcon(QMessageBox.Critical) ##.Information or .Warning or .Question
msg.setStandardButtons(QMessageBox.Retry) ##.Ok or .Ignore or .Save or .Cancel
msg.setDefaultButton(QMessageBox.Retry)
x = msg.exec_()
#OFF BUTTON PUMP_B
@pyqtSlot()
def on_OFF_btn_pumpB_2_clicked(self):
driving_frequency_pumpB = flowRate_convert(self.flowRate_pumpB)
GPIO.setmode(GPIO.BCM) ##Use GPIO Pin
GPIO.setup(logic_switch_pumpB, GPIO.OUT)
GPIO.setup(frequency_PIN_pumpB, GPIO.OUT)
#Turn OFF all pins
GPIO.output(logic_switch_pumpB, GPIO.LOW)
frequency_ON_pumpB = GPIO.PWM(frequency_PIN_pumpB, driving_frequency_pumpB)
frequency_ON_pumpB.stop()
GPIO.cleanup((logic_switch_pumpB, frequency_PIN_pumpB))
#Reset progress bars & flow modes
if (self.staticFlow_pumpB == True):
self.progressBar_staticFlow_pumpB.setValue(0)
self.staticFlow_pumpB = False
#self.flow_rate_pumpB.setValue(0.00)
#self.run_time_pumpB.setValue(0.00)
elif (self.dynamicFlow_pumpB == True):
self.progressBar_dynamicFlow_pumpB.setValue(0)
self.dynamicFlow_pumpB = False
#self.flowRate_start_pumpB.setValue(0.00)
#self.flowRate_end_pumpB.setValue(0.00)
#self.dynamic_sweepRate_pumpB.setValue(0.00)
elif (self.customFlow_pumpB == True):
self.progressBar_customFlow_pumpB.setValue(0)
self.customFlow_pumpB = False
# =============== FLOW MODE TOGGLE BUTTONS ================
@pyqtSlot(bool)
def on_staticFlow_pumpA_toggled(self, staticFlow_pumpA):
if staticFlow_pumpA == True:
self.staticFlow_pumpA = True
elif staticFlow_pumpA == False:
self.staticFlow_pumpA = False
@pyqtSlot(bool)
def on_dynamicFlow_pumpA_toggled(self, dynamicFlow_pumpA):
if dynamicFlow_pumpA == True:
self.dynamicFlow_pumpA = True
elif dynamicFlow_pumpA == False:
self.dynamicFlow_pumpA = False
@pyqtSlot(bool)
def on_customFlow_pumpA_toggled(self, customFlow_pumpA):
if customFlow_pumpA == True:
self.customFlow_pumpA = True
elif customFlow_pumpA == False:
self.customFlow_pumpA = False
@pyqtSlot(bool)
def on_staticFlow_pumpB_toggled(self, staticFlow_pumpB):
if staticFlow_pumpB == True:
self.staticFlow_pumpB = True
elif staticFlow_pumpB == False:
self.staticFlow_pumpB = False
@pyqtSlot(bool)
def on_dynamicFlow_pumpB_toggled(self, dynamicFlow_pumpB):
if dynamicFlow_pumpB == True:
self.dynamicFlow_pumpB = True
elif dynamicFlow_pumpB == False:
self.dynamicFlow_pumpB = False
@pyqtSlot(bool)
def on_customFlow_pumpB_toggled(self, customFlow_pumpB):
if customFlow_pumpB == True:
self.customFlow_pumpB = True
elif customFlow_pumpB == False:
self.customerFlow_pumpB = False
# ================== STATIC PARAMETERS SELECTION BUTTONS ============
@pyqtSlot(float)
def on_run_time_pumpA_valueChanged(self, run_time_pA):
self.run_time_pA = run_time_pA
@pyqtSlot(float)
def on_run_time_pumpB_valueChanged(self, run_time_pB):
self.run_time_pB = run_time_pB
@pyqtSlot(float)
def on_flow_rate_pumpA_valueChanged(self, flowRate_pumpA):
self.flowRate_pumpA = flowRate_pumpA
@pyqtSlot(float)
def on_flow_rate_pumpB_valueChanged(self, flowRate_pumpB):
self.flowRate_pumpB = flowRate_pumpB
# ================= DYNAMIC PARAMETERS SELECTION BUTTONS ===========
@pyqtSlot(float)
def on_flowRate_start_pumpA_valueChanged(self, flowRate_start_pumpA):
self.flowRate_start_pumpA = flowRate_start_pumpA
@pyqtSlot(float)
def on_flowRate_end_pumpA_valueChanged(self, flowRate_end_pumpA):
self.flowRate_end_pumpA = flowRate_end_pumpA
@pyqtSlot(float)
def on_dynamic_sweepRate_pumpA_valueChanged(self, dynamic_sweepRate_pumpA):
self.dynamic_sweepRate_pumpA = dynamic_sweepRate_pumpA
@pyqtSlot(float)
def on_flowRate_start_pumpB_valueChanged(self, flowRate_start_pumpB):
self.flowRate_start_pumpB = flowRate_start_pumpB
@pyqtSlot(float)
def on_flowRate_end_pumpB_valueChanged(self, flowRate_end_pumpB):
self.flowRate_end_pumpB = flowRate_end_pumpB
@pyqtSlot(float)
def on_dynamic_sweepRate_pumpB_valueChanged(self, dynamic_sweepRate_pumpB):
self.dynamic_sweepRate_pumpB = dynamic_sweepRate_pumpB
# =====================CUSTOM PARAMETERS / FILE UPLOAD BUTTONS ====================
@pyqtSlot()
def on_upload_pumpA_clicked(self):
file_filter = '(*.csv)'
filename = QFileDialog.getOpenFileName(parent = self, caption = 'SELECT A DATA FILE', directory = os.getcwd(), filter = file_filter)
#Read the CSV file
with open("testFile.csv", 'r') as csv_file:
csv_reader = csv.reader(csv_file)
#Parse + save flow rate values in list
for row in csv_reader:
self.custom_flowRate_values_pA.append(row)
#Convert values to float
self.custom_flowRate_values_pA = list(np.float_(self.custom_flowRate_values_pA))
@pyqtSlot()
def on_upload_pumpB_clicked(self):
file_filter = '(*.csv)'
filename = QFileDialog.getOpenFileName(parent=self, caption = 'SELECT A DATA FILE', directory = os.getcwd(), filter = file_filter)
#Read the CSV file
with open("testFile.csv", 'r') as csv_file:
csv_reader = csv.reader(csv_file)
#Parse + save flow rate values
for row in csv_reader:
self.custom_flowRate_values_pB.append(row)
#Convert values to float
self.custom_flowRate_values_pB = list(np.float_(self.custom_flowRate_values_pB))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '/home/pi/fluidicControl/ui/window.ui'
#
# Created by: PyQt5 UI code generator 5.7
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1800, 899)
MainWindow.setMaximumSize(QtCore.QSize(1800, 900))
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(114, 159, 207))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
MainWindow.setPalette(palette)
MainWindow.setAutoFillBackground(False)
MainWindow.setStyleSheet("background-color: rgb(114, 159, 207);")
self.centralWidget = QtWidgets.QWidget(MainWindow)
font = QtGui.QFont()
font.setKerning(True)
self.centralWidget.setFont(font)
self.centralWidget.setAutoFillBackground(False)
self.centralWidget.setStyleSheet("background-color: rgb(114, 159, 207);")
self.centralWidget.setObjectName("centralWidget")
self.Pump_A = QtWidgets.QGroupBox(self.centralWidget)
self.Pump_A.setGeometry(QtCore.QRect(20, 30, 850, 850))
self.Pump_A.setMaximumSize(QtCore.QSize(850, 850))
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
self.Pump_A.setPalette(palette)
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.Pump_A.setFont(font)
self.Pump_A.setMouseTracking(False)
self.Pump_A.setFocusPolicy(QtCore.Qt.StrongFocus)
self.Pump_A.setAcceptDrops(False)
self.Pump_A.setLayoutDirection(QtCore.Qt.LeftToRight)
self.Pump_A.setAutoFillBackground(False)
self.Pump_A.setStyleSheet("background-color: rgb(52, 101, 164);\n"
"")
self.Pump_A.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
self.Pump_A.setFlat(True)
self.Pump_A.setCheckable(False)
self.Pump_A.setChecked(False)
self.Pump_A.setObjectName("Pump_A")
self.staticFlow_pumpA = QtWidgets.QGroupBox(self.Pump_A)
self.staticFlow_pumpA.setGeometry(QtCore.QRect(30, 155, 780, 215))
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
font.setKerning(True)
self.staticFlow_pumpA.setFont(font)
self.staticFlow_pumpA.setStyleSheet("background-color: rgb(255, 255, 255);")
self.staticFlow_pumpA.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.staticFlow_pumpA.setCheckable(True)
self.staticFlow_pumpA.setChecked(False)
self.staticFlow_pumpA.setObjectName("staticFlow_pumpA")
self.labelStatic_flowRate_pumpA = QtWidgets.QLabel(self.staticFlow_pumpA)
self.labelStatic_flowRate_pumpA.setGeometry(QtCore.QRect(90, 72, 261, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelStatic_flowRate_pumpA.setFont(font)
self.labelStatic_flowRate_pumpA.setObjectName("labelStatic_flowRate_pumpA")
self.labelStatic_runTime_pumpA = QtWidgets.QLabel(self.staticFlow_pumpA)
self.labelStatic_runTime_pumpA.setGeometry(QtCore.QRect(500, 72, 191, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelStatic_runTime_pumpA.setFont(font)
self.labelStatic_runTime_pumpA.setObjectName("labelStatic_runTime_pumpA")
self.flow_rate_pumpA = QtWidgets.QDoubleSpinBox(self.staticFlow_pumpA)
self.flow_rate_pumpA.setGeometry(QtCore.QRect(90, 115, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.flow_rate_pumpA.setFont(font)
self.flow_rate_pumpA.setMaximum(12000.0)
self.flow_rate_pumpA.setSingleStep(0.01)
self.flow_rate_pumpA.setObjectName("flow_rate_pumpA")
self.run_time_pumpA = QtWidgets.QDoubleSpinBox(self.staticFlow_pumpA)
self.run_time_pumpA.setGeometry(QtCore.QRect(480, 115, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.run_time_pumpA.setFont(font)
self.run_time_pumpA.setMaximum(12000.0)
self.run_time_pumpA.setSingleStep(0.01)
self.run_time_pumpA.setObjectName("run_time_pumpA")
self.progressBar_staticFlow_pumpA = QtWidgets.QProgressBar(self.staticFlow_pumpA)
self.progressBar_staticFlow_pumpA.setGeometry(QtCore.QRect(320, 5, 450, 55))
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.progressBar_staticFlow_pumpA.setFont(font)
self.progressBar_staticFlow_pumpA.setProperty("value", 0)
self.progressBar_staticFlow_pumpA.setObjectName("progressBar_staticFlow_pumpA")
self.dynamicFlow_pumpA = QtWidgets.QGroupBox(self.Pump_A)
self.dynamicFlow_pumpA.setGeometry(QtCore.QRect(30, 390, 780, 310))
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
self.dynamicFlow_pumpA.setPalette(palette)
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.dynamicFlow_pumpA.setFont(font)
self.dynamicFlow_pumpA.setStyleSheet("background-color: rgb(255, 255, 255);")
self.dynamicFlow_pumpA.setCheckable(True)
self.dynamicFlow_pumpA.setChecked(False)
self.dynamicFlow_pumpA.setObjectName("dynamicFlow_pumpA")
self.labelDynamic_from_pumpA = QtWidgets.QLabel(self.dynamicFlow_pumpA)
self.labelDynamic_from_pumpA.setGeometry(QtCore.QRect(50, 130, 81, 21))
font = QtGui.QFont()
font.setPointSize(18)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_from_pumpA.setFont(font)
self.labelDynamic_from_pumpA.setStyleSheet("color: rgb(0, 0, 0);")
self.labelDynamic_from_pumpA.setObjectName("labelDynamic_from_pumpA")
self.labelDynamic_to_pumpA = QtWidgets.QLabel(self.dynamicFlow_pumpA)
self.labelDynamic_to_pumpA.setGeometry(QtCore.QRect(470, 130, 51, 21))
font = QtGui.QFont()
font.setPointSize(18)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_to_pumpA.setFont(font)
self.labelDynamic_to_pumpA.setStyleSheet("color: rgb(0, 0, 0);")
self.labelDynamic_to_pumpA.setObjectName("labelDynamic_to_pumpA")
self.labelDynamic_startFRate_pumpA = QtWidgets.QLabel(self.dynamicFlow_pumpA)
self.labelDynamic_startFRate_pumpA.setGeometry(QtCore.QRect(90, 72, 321, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_startFRate_pumpA.setFont(font)
self.labelDynamic_startFRate_pumpA.setObjectName("labelDynamic_startFRate_pumpA")
self.labelDynamic_endFRate_pumpA = QtWidgets.QLabel(self.dynamicFlow_pumpA)
self.labelDynamic_endFRate_pumpA.setGeometry(QtCore.QRect(475, 72, 291, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_endFRate_pumpA.setFont(font)
self.labelDynamic_endFRate_pumpA.setObjectName("labelDynamic_endFRate_pumpA")
self.labelDynamic_sweep_pumpA = QtWidgets.QLabel(self.dynamicFlow_pumpA)
self.labelDynamic_sweep_pumpA.setGeometry(QtCore.QRect(20, 230, 271, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_sweep_pumpA.setFont(font)
self.labelDynamic_sweep_pumpA.setObjectName("labelDynamic_sweep_pumpA")
self.flowRate_start_pumpA = QtWidgets.QDoubleSpinBox(self.dynamicFlow_pumpA)
self.flowRate_start_pumpA.setGeometry(QtCore.QRect(140, 110, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.flowRate_start_pumpA.setFont(font)
self.flowRate_start_pumpA.setMaximum(12000.0)
self.flowRate_start_pumpA.setSingleStep(0.01)
self.flowRate_start_pumpA.setObjectName("flowRate_start_pumpA")
self.flowRate_end_pumpA = QtWidgets.QDoubleSpinBox(self.dynamicFlow_pumpA)
self.flowRate_end_pumpA.setGeometry(QtCore.QRect(530, 110, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.flowRate_end_pumpA.setFont(font)
self.flowRate_end_pumpA.setMaximum(12000.0)
self.flowRate_end_pumpA.setSingleStep(0.01)
self.flowRate_end_pumpA.setObjectName("flowRate_end_pumpA")
self.dynamic_sweepRate_pumpA = QtWidgets.QDoubleSpinBox(self.dynamicFlow_pumpA)
self.dynamic_sweepRate_pumpA.setGeometry(QtCore.QRect(345, 210, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.dynamic_sweepRate_pumpA.setFont(font)
self.dynamic_sweepRate_pumpA.setMinimum(-12000.0)
self.dynamic_sweepRate_pumpA.setMaximum(12000.0)
self.dynamic_sweepRate_pumpA.setSingleStep(0.01)
self.dynamic_sweepRate_pumpA.setObjectName("dynamic_sweepRate_pumpA")
self.progressBar_dynamicFlow_pumpA = QtWidgets.QProgressBar(self.dynamicFlow_pumpA)
self.progressBar_dynamicFlow_pumpA.setGeometry(QtCore.QRect(320, 5, 450, 55))
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setWeight(75)
self.progressBar_dynamicFlow_pumpA.setFont(font)
self.progressBar_dynamicFlow_pumpA.setProperty("value", 0)
self.progressBar_dynamicFlow_pumpA.setObjectName("progressBar_dynamicFlow_pumpA")
self.customFlow_pumpA = QtWidgets.QGroupBox(self.Pump_A)
self.customFlow_pumpA.setGeometry(QtCore.QRect(30, 720, 780, 115))
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.customFlow_pumpA.setFont(font)
self.customFlow_pumpA.setStyleSheet("background-color: rgb(255, 255, 255);")
self.customFlow_pumpA.setCheckable(True)
self.customFlow_pumpA.setChecked(False)
self.customFlow_pumpA.setObjectName("customFlow_pumpA")
self.upload_pumpA = QtWidgets.QPushButton(self.customFlow_pumpA)
self.upload_pumpA.setGeometry(QtCore.QRect(90, 68, 190, 40))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setItalic(True)
font.setWeight(50)
self.upload_pumpA.setFont(font)
self.upload_pumpA.setStyleSheet("background-color: rgb(211, 215, 207);")
self.upload_pumpA.setObjectName("upload_pumpA")
self.progressBar_customFlow_pumpA = QtWidgets.QProgressBar(self.customFlow_pumpA)
self.progressBar_customFlow_pumpA.setGeometry(QtCore.QRect(320, 5, 450, 55))
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setWeight(75)
self.progressBar_customFlow_pumpA.setFont(font)
self.progressBar_customFlow_pumpA.setProperty("value", 0)
self.progressBar_customFlow_pumpA.setObjectName("progressBar_customFlow_pumpA")
self.ON_btn_pumpA = QtWidgets.QPushButton(self.Pump_A)
self.ON_btn_pumpA.setGeometry(QtCore.QRect(50, 30, 230, 110))
self.ON_btn_pumpA.setMaximumSize(QtCore.QSize(230, 110))
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(115, 210, 22))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
self.ON_btn_pumpA.setPalette(palette)
font = QtGui.QFont()
font.setPointSize(70)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.ON_btn_pumpA.setFont(font)
self.ON_btn_pumpA.setMouseTracking(True)
self.ON_btn_pumpA.setFocusPolicy(QtCore.Qt.ClickFocus)
self.ON_btn_pumpA.setStyleSheet("background-color: rgb(115, 210, 22);")
self.ON_btn_pumpA.setCheckable(False)
self.ON_btn_pumpA.setChecked(False)
self.ON_btn_pumpA.setAutoDefault(False)
self.ON_btn_pumpA.setDefault(False)
self.ON_btn_pumpA.setFlat(False)
self.ON_btn_pumpA.setObjectName("ON_btn_pumpA")
self.OFF_btn_pumpA = QtWidgets.QPushButton(self.Pump_A)
self.OFF_btn_pumpA.setGeometry(QtCore.QRect(580, 30, 230, 110))
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(200, 0, 0))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
self.OFF_btn_pumpA.setPalette(palette)
font = QtGui.QFont()
font.setPointSize(70)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.OFF_btn_pumpA.setFont(font)
self.OFF_btn_pumpA.setMouseTracking(True)
self.OFF_btn_pumpA.setFocusPolicy(QtCore.Qt.ClickFocus)
self.OFF_btn_pumpA.setStyleSheet("background-color: rgb(200, 0, 0);\n"
"\n"
"\n"
"")
self.OFF_btn_pumpA.setCheckable(False)
self.OFF_btn_pumpA.setChecked(False)
self.OFF_btn_pumpA.setObjectName("OFF_btn_pumpA")
self.Pump_B = QtWidgets.QGroupBox(self.centralWidget)
self.Pump_B.setGeometry(QtCore.QRect(930, 30, 850, 850))
self.Pump_B.setMaximumSize(QtCore.QSize(850, 850))
palette = QtGui.QPalette()
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
brush = QtGui.QBrush(QtGui.QColor(52, 101, 164))
brush.setStyle(QtCore.Qt.SolidPattern)
palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
self.Pump_B.setPalette(palette)
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.Pump_B.setFont(font)
self.Pump_B.setAutoFillBackground(False)
self.Pump_B.setStyleSheet("background-color: rgb(52, 101, 164);")
self.Pump_B.setAlignment(QtCore.Qt.AlignCenter)
self.Pump_B.setFlat(True)
self.Pump_B.setCheckable(False)
self.Pump_B.setObjectName("Pump_B")
self.staticFlow_pumpB = QtWidgets.QGroupBox(self.Pump_B)
self.staticFlow_pumpB.setGeometry(QtCore.QRect(30, 155, 780, 215))
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.staticFlow_pumpB.setFont(font)
self.staticFlow_pumpB.setStyleSheet("background-color: rgb(255, 255, 255);")
self.staticFlow_pumpB.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
self.staticFlow_pumpB.setCheckable(True)
self.staticFlow_pumpB.setChecked(False)
self.staticFlow_pumpB.setObjectName("staticFlow_pumpB")
self.labelStatic_flowRate_pumpB = QtWidgets.QLabel(self.staticFlow_pumpB)
self.labelStatic_flowRate_pumpB.setGeometry(QtCore.QRect(90, 72, 271, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelStatic_flowRate_pumpB.setFont(font)
self.labelStatic_flowRate_pumpB.setObjectName("labelStatic_flowRate_pumpB")
self.labelStatic_runTime_pumpB = QtWidgets.QLabel(self.staticFlow_pumpB)
self.labelStatic_runTime_pumpB.setGeometry(QtCore.QRect(500, 72, 221, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelStatic_runTime_pumpB.setFont(font)
self.labelStatic_runTime_pumpB.setObjectName("labelStatic_runTime_pumpB")
self.flow_rate_pumpB = QtWidgets.QDoubleSpinBox(self.staticFlow_pumpB)
self.flow_rate_pumpB.setGeometry(QtCore.QRect(90, 115, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.flow_rate_pumpB.setFont(font)
self.flow_rate_pumpB.setMaximum(12000.0)
self.flow_rate_pumpB.setSingleStep(0.01)
self.flow_rate_pumpB.setObjectName("flow_rate_pumpB")
self.run_time_pumpB = QtWidgets.QDoubleSpinBox(self.staticFlow_pumpB)
self.run_time_pumpB.setGeometry(QtCore.QRect(480, 115, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.run_time_pumpB.setFont(font)
self.run_time_pumpB.setMaximum(12000.0)
self.run_time_pumpB.setSingleStep(0.01)
self.run_time_pumpB.setObjectName("run_time_pumpB")
self.progressBar_staticFlow_pumpB = QtWidgets.QProgressBar(self.staticFlow_pumpB)
self.progressBar_staticFlow_pumpB.setGeometry(QtCore.QRect(320, 5, 450, 55))
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setWeight(75)
self.progressBar_staticFlow_pumpB.setFont(font)
self.progressBar_staticFlow_pumpB.setProperty("value", 0)
self.progressBar_staticFlow_pumpB.setObjectName("progressBar_staticFlow_pumpB")
self.customFlow_pumpB = QtWidgets.QGroupBox(self.Pump_B)
self.customFlow_pumpB.setGeometry(QtCore.QRect(30, 720, 780, 115))
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.customFlow_pumpB.setFont(font)
self.customFlow_pumpB.setStyleSheet("background-color: rgb(255, 255, 255);")
self.customFlow_pumpB.setCheckable(True)
self.customFlow_pumpB.setChecked(False)
self.customFlow_pumpB.setObjectName("customFlow_pumpB")
self.upload_pumpB = QtWidgets.QPushButton(self.customFlow_pumpB)
self.upload_pumpB.setGeometry(QtCore.QRect(90, 68, 190, 40))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setItalic(True)
font.setWeight(50)
self.upload_pumpB.setFont(font)
self.upload_pumpB.setStyleSheet("background-color: rgb(211, 215, 207);")
self.upload_pumpB.setObjectName("upload_pumpB")
self.progressBar_customFlow_pumpB = QtWidgets.QProgressBar(self.customFlow_pumpB)
self.progressBar_customFlow_pumpB.setGeometry(QtCore.QRect(320, 5, 450, 55))
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setWeight(75)
self.progressBar_customFlow_pumpB.setFont(font)
self.progressBar_customFlow_pumpB.setProperty("value", 0)
self.progressBar_customFlow_pumpB.setObjectName("progressBar_customFlow_pumpB")
self.ON_btn_pumpB = QtWidgets.QPushButton(self.Pump_B)
self.ON_btn_pumpB.setGeometry(QtCore.QRect(50, 30, 230, 110))
font = QtGui.QFont()
font.setPointSize(70)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.ON_btn_pumpB.setFont(font)
self.ON_btn_pumpB.setMouseTracking(True)
self.ON_btn_pumpB.setFocusPolicy(QtCore.Qt.ClickFocus)
self.ON_btn_pumpB.setStyleSheet("background-color: rgb(115, 210, 22);")
self.ON_btn_pumpB.setCheckable(False)
self.ON_btn_pumpB.setChecked(False)
self.ON_btn_pumpB.setAutoRepeat(False)
self.ON_btn_pumpB.setObjectName("ON_btn_pumpB")
self.OFF_btn_pumpB_2 = QtWidgets.QPushButton(self.Pump_B)
self.OFF_btn_pumpB_2.setGeometry(QtCore.QRect(580, 30, 230, 110))
font = QtGui.QFont()
font.setPointSize(70)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.OFF_btn_pumpB_2.setFont(font)
self.OFF_btn_pumpB_2.setMouseTracking(True)
self.OFF_btn_pumpB_2.setFocusPolicy(QtCore.Qt.ClickFocus)
self.OFF_btn_pumpB_2.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.OFF_btn_pumpB_2.setStyleSheet("background-color: rgb(200, 0, 0);")
self.OFF_btn_pumpB_2.setCheckable(False)
self.OFF_btn_pumpB_2.setChecked(False)
self.OFF_btn_pumpB_2.setObjectName("OFF_btn_pumpB_2")
self.dynamicFlow_pumpB = QtWidgets.QGroupBox(self.Pump_B)
self.dynamicFlow_pumpB.setGeometry(QtCore.QRect(30, 390, 780, 310))
font = QtGui.QFont()
font.setPointSize(35)
font.setBold(True)
font.setItalic(True)
font.setWeight(75)
self.dynamicFlow_pumpB.setFont(font)
self.dynamicFlow_pumpB.setStyleSheet("background-color: rgb(255, 255, 255);")
self.dynamicFlow_pumpB.setCheckable(True)
self.dynamicFlow_pumpB.setChecked(False)
self.dynamicFlow_pumpB.setObjectName("dynamicFlow_pumpB")
self.labelDynamic_from_pumpB = QtWidgets.QLabel(self.dynamicFlow_pumpB)
self.labelDynamic_from_pumpB.setGeometry(QtCore.QRect(50, 130, 81, 21))
font = QtGui.QFont()
font.setPointSize(18)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_from_pumpB.setFont(font)
self.labelDynamic_from_pumpB.setStyleSheet("color: rgb(0, 0, 0);")
self.labelDynamic_from_pumpB.setObjectName("labelDynamic_from_pumpB")
self.labelDynamic_to_pumpB = QtWidgets.QLabel(self.dynamicFlow_pumpB)
self.labelDynamic_to_pumpB.setGeometry(QtCore.QRect(470, 130, 51, 21))
font = QtGui.QFont()
font.setPointSize(18)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_to_pumpB.setFont(font)
self.labelDynamic_to_pumpB.setStyleSheet("color: rgb(0, 0, 0);")
self.labelDynamic_to_pumpB.setObjectName("labelDynamic_to_pumpB")
self.labelDynamic_startFRate_pumpB = QtWidgets.QLabel(self.dynamicFlow_pumpB)
self.labelDynamic_startFRate_pumpB.setGeometry(QtCore.QRect(90, 72, 321, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_startFRate_pumpB.setFont(font)
self.labelDynamic_startFRate_pumpB.setObjectName("labelDynamic_startFRate_pumpB")
self.labelDynamic_endFRate_pumpB = QtWidgets.QLabel(self.dynamicFlow_pumpB)
self.labelDynamic_endFRate_pumpB.setGeometry(QtCore.QRect(475, 72, 301, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_endFRate_pumpB.setFont(font)
self.labelDynamic_endFRate_pumpB.setObjectName("labelDynamic_endFRate_pumpB")
self.labelDynamic_sweep_pumpB = QtWidgets.QLabel(self.dynamicFlow_pumpB)
self.labelDynamic_sweep_pumpB.setGeometry(QtCore.QRect(20, 230, 271, 31))
font = QtGui.QFont()
font.setPointSize(20)
font.setBold(False)
font.setWeight(50)
self.labelDynamic_sweep_pumpB.setFont(font)
self.labelDynamic_sweep_pumpB.setObjectName("labelDynamic_sweep_pumpB")
self.flowRate_start_pumpB = QtWidgets.QDoubleSpinBox(self.dynamicFlow_pumpB)
self.flowRate_start_pumpB.setGeometry(QtCore.QRect(140, 110, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.flowRate_start_pumpB.setFont(font)
self.flowRate_start_pumpB.setMaximum(12000.0)
self.flowRate_start_pumpB.setSingleStep(0.01)
self.flowRate_start_pumpB.setObjectName("flowRate_start_pumpB")
self.flowRate_end_pumpB = QtWidgets.QDoubleSpinBox(self.dynamicFlow_pumpB)
self.flowRate_end_pumpB.setGeometry(QtCore.QRect(530, 110, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.flowRate_end_pumpB.setFont(font)
self.flowRate_end_pumpB.setMaximum(12000.0)
self.flowRate_end_pumpB.setSingleStep(0.01)
self.flowRate_end_pumpB.setObjectName("flowRate_end_pumpB")
self.dynamic_sweepRate_pumpB = QtWidgets.QDoubleSpinBox(self.dynamicFlow_pumpB)
self.dynamic_sweepRate_pumpB.setGeometry(QtCore.QRect(345, 210, 230, 90))
font = QtGui.QFont()
font.setPointSize(55)
font.setBold(False)
font.setWeight(50)
self.dynamic_sweepRate_pumpB.setFont(font)
self.dynamic_sweepRate_pumpB.setMinimum(-12000.0)
self.dynamic_sweepRate_pumpB.setMaximum(12000.0)
self.dynamic_sweepRate_pumpB.setSingleStep(0.01)
self.dynamic_sweepRate_pumpB.setObjectName("dynamic_sweepRate_pumpB")
self.progressBar_dynamicFlow_pumpB = QtWidgets.QProgressBar(self.dynamicFlow_pumpB)
self.progressBar_dynamicFlow_pumpB.setGeometry(QtCore.QRect(320, 5, 450, 55))
font = QtGui.QFont()
font.setPointSize(45)
font.setBold(True)
font.setWeight(75)
self.progressBar_dynamicFlow_pumpB.setFont(font)
self.progressBar_dynamicFlow_pumpB.setProperty("value", 0)
self.progressBar_dynamicFlow_pumpB.setObjectName("progressBar_dynamicFlow_pumpB")
self.line = QtWidgets.QFrame(self.centralWidget)
self.line.setGeometry(QtCore.QRect(890, 0, 20, 900))
self.line.setMaximumSize(QtCore.QSize(50, 900))
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.line.setFont(font)
self.line.setStyleSheet("color: rgb(0, 0, 0);\n"
"")
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setLineWidth(10)
self.line.setMidLineWidth(1)
self.line.setFrameShape(QtWidgets.QFrame.VLine)
self.line.setObjectName("line")
MainWindow.setCentralWidget(self.centralWidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.Pump_A.setTitle(_translate("MainWindow", "Pump A"))
self.staticFlow_pumpA.setTitle(_translate("MainWindow", "Static Flow"))
self.labelStatic_flowRate_pumpA.setText(_translate("MainWindow", "Flow Rate (uL / Min)"))
self.labelStatic_runTime_pumpA.setText(_translate("MainWindow", "Run Time (Sec)"))
self.dynamicFlow_pumpA.setTitle(_translate("MainWindow", "Dynamic Flow"))
self.labelDynamic_from_pumpA.setText(_translate("MainWindow", "FROM:"))
self.labelDynamic_to_pumpA.setText(_translate("MainWindow", " TO:"))
self.labelDynamic_startFRate_pumpA.setText(_translate("MainWindow", "Start Flow Rate (uL/ Min)"))
self.labelDynamic_endFRate_pumpA.setText(_translate("MainWindow", "End Flow Rate (uL/ Min)"))
self.labelDynamic_sweep_pumpA.setText(_translate("MainWindow", "Sweep Rate (uL/ Min)"))
self.customFlow_pumpA.setTitle(_translate("MainWindow", "Custom Flow"))
self.upload_pumpA.setText(_translate("MainWindow", "Upload CSV File"))
self.ON_btn_pumpA.setText(_translate("MainWindow", "ON"))
self.OFF_btn_pumpA.setText(_translate("MainWindow", "OFF"))
self.Pump_B.setTitle(_translate("MainWindow", "Pump B"))
self.staticFlow_pumpB.setTitle(_translate("MainWindow", "Static Flow"))
self.labelStatic_flowRate_pumpB.setText(_translate("MainWindow", "Flow Rate (uL / Min)"))
self.labelStatic_runTime_pumpB.setText(_translate("MainWindow", "Run Time (Sec)"))
self.customFlow_pumpB.setTitle(_translate("MainWindow", "Custom Flow"))
self.upload_pumpB.setText(_translate("MainWindow", "Upload CSV File"))
self.ON_btn_pumpB.setText(_translate("MainWindow", "ON"))
self.OFF_btn_pumpB_2.setText(_translate("MainWindow", "OFF"))
self.dynamicFlow_pumpB.setTitle(_translate("MainWindow", "Dynamic Flow"))
self.labelDynamic_from_pumpB.setText(_translate("MainWindow", "FROM:"))
self.labelDynamic_to_pumpB.setText(_translate("MainWindow", " TO:"))
self.labelDynamic_startFRate_pumpB.setText(_translate("MainWindow", "Start Flow Rate (uL/ Min)"))
self.labelDynamic_endFRate_pumpB.setText(_translate("MainWindow", "End Flow Rate (uL/ Min)"))
self.labelDynamic_sweep_pumpB.setText(_translate("MainWindow", "Sweep Rate (uL/ Min)"))
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_())
Comments