Commit 23265307 authored by Martin Drechsler's avatar Martin Drechsler

Now the roi analysis is enabled.

parent c644ab2b
...@@ -8,206 +8,212 @@ Created on Thu May 31 14:22:48 2018 ...@@ -8,206 +8,212 @@ Created on Thu May 31 14:22:48 2018
import sys import sys
from pyqtgraph.Qt import QtCore, QtGui from pyqtgraph.Qt import QtGui
from myWidgets import anal_control_signal, digital_control_signal, activation_button, burleighWM from myWidgets import anal_control_signal, digital_control_signal, activation_button, burleighWM
from PyQt5.QtWidgets import QMainWindow
from pyqtgraph import dockarea from pyqtgraph import dockarea
import pyqtgraph as pg import pyqtgraph as pg
import myToolbar from myToolbar import myToolbarMenu
import qdarkstyle import qdarkstyle
import os import os
os.environ['PYQTGRAPH_QT_LIB'] = 'PyQt5' os.environ['PYQTGRAPH_QT_LIB'] = 'PyQt5'
############################################################################### ###############################################################################
#This creates the window for the gui class GuiMainWindow(QMainWindow):
app = QtGui.QApplication([]) def __init__(self):
app.setStyleSheet(qdarkstyle.load_stylesheet_from_environment(is_pyqtgraph=True)) # set dark style super().__init__()
win = QtGui.QMainWindow()
self.initUI()
def initUI(self):
win.setWindowTitle('My GUI')
win.setWindowIcon(QtGui.QIcon('snuffles.png')) self.win = QtGui.QMainWindow()
self.win.setWindowTitle('My GUI')
self.win.setWindowIcon(QtGui.QIcon('snuffles.png'))
app_icon = QtGui.QIcon()
app_icon.addFile('snuffles.png') self.area = dockarea.DockArea()
app.setWindowIcon(app_icon) self.win.setCentralWidget(self.area)
self.cw = QtGui.QWidget()
area = dockarea.DockArea() self.win.show()
win.setCentralWidget(area)
cw = QtGui.QWidget()
win.show()
############################################################################### ###############################################################################
# Here I create the layouts # Here I create the layouts
layout397 = pg.LayoutWidget() self.layout397 = pg.LayoutWidget()
layout866 = pg.LayoutWidget() self.layout866 = pg.LayoutWidget()
layoutPI = pg.LayoutWidget() self.layoutPI = pg.LayoutWidget()
layoutIMG = pg.LayoutWidget() self.layoutIMG = pg.LayoutWidget()
layoutWM = pg.LayoutWidget() self.layoutWM = pg.LayoutWidget()
layout397_scan = pg.LayoutWidget() self.layout397_scan = pg.LayoutWidget()
layout866_scan = pg.LayoutWidget() self.layout866_scan = pg.LayoutWidget()
layout423_scan = pg.LayoutWidget() self.layout423_scan = pg.LayoutWidget()
layout_trap_electrodes = pg.LayoutWidget() self.layout_trap_electrodes = pg.LayoutWidget()
layout_activate = pg.LayoutWidget() self.layout_activate = pg.LayoutWidget()
# Here I create the docks # Here I create the docks
s1 = 100 self.s1 = 100
s2 = 100 self.s2 = 100
d397 = dockarea.Dock("Dock397", size=(s1, s2)) self.d397 = dockarea.Dock("Dock397", size=(self.s1, self.s2))
d866 = dockarea.Dock("Dock866", size=(s1, s2)) self.d866 = dockarea.Dock("Dock866", size=(self.s1, self.s2))
dPI = dockarea.Dock("DockPI", size=(s1, s2)) self.dPI = dockarea.Dock("DockPI", size=(self.s1, self.s2))
dWM = dockarea.Dock("DockWM", size=(s1, s2)) self.dWM = dockarea.Dock("DockWM", size=(self.s1, self.s2))
d397_scan = dockarea.Dock("Dock 397 scan", size=(s1, s2)) self.d397_scan = dockarea.Dock("Dock 397 scan", size=(self.s1, self.s2))
d866_scan = dockarea.Dock("Dock 866 scan", size=(s1, s2)) self.d866_scan = dockarea.Dock("Dock 866 scan", size=(self.s1, self.s2))
d423_scan = dockarea.Dock("Dock 423 scan", size=(s1, s2)) self.d423_scan = dockarea.Dock("Dock 423 scan", size=(self.s1, self.s2))
dtrap_electrodes = dockarea.Dock("Dock Trap Electrodes", size=(s1, s2)) self.dtrap_electrodes = dockarea.Dock("Dock Trap Electrodes", size=(self.s1, self.s2))
dactivate = dockarea.Dock(" ", hideTitle=False, size = (s1/4, s2)) self.dactivate = dockarea.Dock(" ", hideTitle=False, size = (self.s1/4, self.s2))
dactivate.hideTitleBar() self.dactivate.hideTitleBar()
# Here I add the docks # Here I add the docks
area.addDock( dtrap_electrodes) self.area.addDock( self.dtrap_electrodes)
area.addDock(d397, 'bottom', dtrap_electrodes) self.area.addDock(self.d397, 'bottom', self.dtrap_electrodes)
area.addDock(d866, 'bottom', d397) self.area.addDock(self.d866, 'bottom', self.d397)
area.addDock(dPI, 'bottom', d866) self.area.addDock(self.dPI, 'bottom', self.d866)
area.addDock(dWM, 'bottom', dPI) self.area.addDock(self.dWM, 'bottom', self.dPI)
area.addDock(d397_scan, 'right', d397) self.area.addDock(self.d397_scan, 'right', self.d397)
area.addDock(d423_scan, 'right', dPI) self.area.addDock(self.d423_scan, 'right', self.dPI)
area.addDock(d866_scan, 'right', d866) self.area.addDock(self.d866_scan, 'right', self.d866)
area.addDock(dactivate, 'right', dtrap_electrodes) self.area.addDock(self.dactivate, 'right', self.dtrap_electrodes)
area.moveDock(dWM, 'above', dtrap_electrodes) self.area.moveDock(self.dWM, 'above', self.dtrap_electrodes)
# Here I add the layouts to the corresponding dock # Here I add the layouts to the corresponding dock
d397.addWidget(layout397) self.d397.addWidget(self.layout397)
d866.addWidget(layout866) self.d866.addWidget(self.layout866)
dPI.addWidget(layoutPI) self.dPI.addWidget(self.layoutPI)
dWM.addWidget(layoutWM) self.dWM.addWidget(self.layoutWM)
d397_scan.addWidget(layout397_scan) self.d397_scan.addWidget(self.layout397_scan)
d866_scan.addWidget(layout866_scan) self.d866_scan.addWidget(self.layout866_scan)
d423_scan.addWidget(layout423_scan) self.d423_scan.addWidget(self.layout423_scan)
dtrap_electrodes.addWidget(layout_trap_electrodes) self.dtrap_electrodes.addWidget(self.layout_trap_electrodes)
dactivate.addWidget(layout_activate) self.dactivate.addWidget(self.layout_activate)
############ creating the controls ######################## ############ creating the controls ########################
piezoA397 = anal_control_signal('piezoA397', 13, out_minimum=0, out_maximum=4, out_step=0.01) self.piezoA397 = anal_control_signal('piezoA397', 13, out_minimum=0, out_maximum=4, out_step=0.01)
piezoB397 = anal_control_signal('piezoB397', 7, out_step = 0.01) self.piezoB397 = anal_control_signal('piezoB397', 7, out_step = 0.01)
piezoA866 = anal_control_signal('piezoA866', 14, out_minimum=0, out_maximum=4, out_step=0.01) self.piezoA866 = anal_control_signal('piezoA866', 14, out_minimum=0, out_maximum=4, out_step=0.01)
piezoB866 = anal_control_signal('piezoB866', 6, out_step = 0.01) self.piezoB866 = anal_control_signal('piezoB866', 6, out_step = 0.01)
piezoA423 = anal_control_signal('piezoA423', 1, out_step = 0.01) self.piezoA423 = anal_control_signal('piezoA423', 1, out_step = 0.01)
trapDCA = anal_control_signal('DC A', 2) self.trapDCA = anal_control_signal('DC A', 2)
trapDCB = anal_control_signal('DC B', 3) self.trapDCB = anal_control_signal('DC B', 3)
trapCompC = anal_control_signal('Comp C', 4) self.trapCompC = anal_control_signal('Comp C', 4)
trapCompD = anal_control_signal('Comp D', 5) self.trapCompD = anal_control_signal('Comp D', 5)
shutter397 = digital_control_signal('shutter397', 0) self.shutter397 = digital_control_signal('shutter397', 0)
shutter866 = digital_control_signal('shutter866', 2) self.shutter866 = digital_control_signal('shutter866', 2)
shutter423 = digital_control_signal('shutter423', 1) self.shutter423 = digital_control_signal('shutter423', 1)
shutterLED = digital_control_signal('shutterLED', 3) self.shutterLED = digital_control_signal('shutterLED', 3)
#############Toolbar and initial loading of config ############################ #############Toolbar and initial loading of config ############################
myToolbar.first_load(anal_control_signal._registry)
myToolbar.incorporate_toolbar(win, anal_control_signal._registry) toolbar = myToolbarMenu(self.win, anal_control_signal._registry )
############################################################################### ###############################################################################
#here I connect the spinboxes to the daq analog outputs: #here I connect the spinboxes to the daq analog outputs:
for ao in anal_control_signal._registry: for ao in anal_control_signal._registry:
ao.connectSpinBoxesToDaq() ao.connectSpinBoxesToDaq()
############################################################################### ###############################################################################
#activate button #activate button
actB = activation_button() self.actB = activation_button()
layout_activate.addWidget(actB.button) self.layout_activate.addWidget(self.actB.button)
############################################################################### ###############################################################################
#Adding the controls: #Adding the controls:
######### 397 ########### ######### 397 ###########
layout397.addWidget(QtGui.QLabel('397'), 0, 0) self.layout397.addWidget(QtGui.QLabel('397'), 0, 0)
layout397.addWidget(QtGui.QLabel(piezoA397.name), 1, 0), layout397.addWidget(piezoA397.sb, 1, 1) self.layout397.addWidget(QtGui.QLabel(self.piezoA397.name), 1, 0), self.layout397.addWidget(self.piezoA397.sb, 1, 1)
layout397.addWidget(QtGui.QLabel(piezoB397.name), 2, 0), layout397.addWidget(piezoB397.sb, 2, 1) self.layout397.addWidget(QtGui.QLabel(self.piezoB397.name), 2, 0), self.layout397.addWidget(self.piezoB397.sb, 2, 1)
layout397.addWidget(QtGui.QLabel(shutter397.name), 3, 0), layout397.addWidget(shutter397.cb, 3, 1) self.layout397.addWidget(QtGui.QLabel(self.shutter397.name), 3, 0), self.layout397.addWidget(self.shutter397.cb, 3, 1)
layout397_scan.addWidget(QtGui.QLabel('397 Scan piezo B'), 0, 0) self.layout397_scan.addWidget(QtGui.QLabel('397 Scan piezo B'), 0, 0)
layout397_scan.addWidget(QtGui.QLabel('start'), 1, 0), layout397_scan.addWidget(piezoB397.scan_sb_start, 1, 1) self.layout397_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_start, 1, 1)
layout397_scan.addWidget(QtGui.QLabel('stop'), 2, 0), layout397_scan.addWidget(piezoB397.scan_sb_stop, 2, 1) self.layout397_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_stop, 2, 1)
layout397_scan.addWidget(QtGui.QLabel('period'), 3, 0), layout397_scan.addWidget(piezoB397.scan_sb_period, 3, 1) self.layout397_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_period, 3, 1)
layout397_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), layout397_scan.addWidget(piezoB397.scan_button, 4, 1) self.layout397_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout397_scan.addWidget(self.piezoB397.scan_button, 4, 1)
layout397_scan.addWidget(piezoB397.scanLabelValue, 5, 0) self.layout397_scan.addWidget(self.piezoB397.scanLabelValue, 5, 0)
layout397_scan.addWidget(piezoB397.scanpBar, 5, 1) self.layout397_scan.addWidget(self.piezoB397.scanpBar, 5, 1)
######################### #########################
######### 866 ########### ######### 866 ###########
layout866.addWidget(QtGui.QLabel('866'), 0, 0) self.layout866.addWidget(QtGui.QLabel('866'), 0, 0)
layout866.addWidget(QtGui.QLabel(piezoA866.name), 1, 0), layout866.addWidget(piezoA866.sb, 1, 1) self.layout866.addWidget(QtGui.QLabel(self.piezoA866.name), 1, 0), self.layout866.addWidget(self.piezoA866.sb, 1, 1)
layout866.addWidget(QtGui.QLabel(piezoB866.name), 2, 0), layout866.addWidget(piezoB866.sb, 2, 1) self.layout866.addWidget(QtGui.QLabel(self.piezoB866.name), 2, 0), self.layout866.addWidget(self.piezoB866.sb, 2, 1)
layout866.addWidget(QtGui.QLabel(shutter866.name), 3, 0), layout866.addWidget(shutter866.cb, 3, 1) self.layout866.addWidget(QtGui.QLabel(self.shutter866.name), 3, 0), self.layout866.addWidget(self.shutter866.cb, 3, 1)
layout866_scan.addWidget(QtGui.QLabel('866 Scan piezo B'), 0, 0) self.layout866_scan.addWidget(QtGui.QLabel('866 Scan piezo B'), 0, 0)
layout866_scan.addWidget(QtGui.QLabel('start'), 1, 0), layout866_scan.addWidget(piezoB866.scan_sb_start, 1, 1) self.layout866_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_start, 1, 1)
layout866_scan.addWidget(QtGui.QLabel('stop'), 2, 0), layout866_scan.addWidget(piezoB866.scan_sb_stop, 2, 1) self.layout866_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_stop, 2, 1)
layout866_scan.addWidget(QtGui.QLabel('period'), 3, 0), layout866_scan.addWidget(piezoB866.scan_sb_period, 3, 1) self.layout866_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_period, 3, 1)
layout866_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), layout866_scan.addWidget(piezoB866.scan_button, 4, 1) self.layout866_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout866_scan.addWidget(self.piezoB866.scan_button, 4, 1)
layout866_scan.addWidget(piezoB866.scanLabelValue, 5, 0) self.layout866_scan.addWidget(self.piezoB866.scanLabelValue, 5, 0)
layout866_scan.addWidget(piezoB866.scanpBar, 5, 1) self.layout866_scan.addWidget(self.piezoB866.scanpBar, 5, 1)
######################### #########################
######### PI ########### ######### PI ###########
layoutPI.addWidget(QtGui.QLabel('Photoion'), 0, 0) self.layoutPI.addWidget(QtGui.QLabel('Photoion'), 0, 0)
layoutPI.addWidget(QtGui.QLabel(piezoA423.name), 1, 0), layoutPI.addWidget(piezoA423.sb, 1, 1) self.layoutPI.addWidget(QtGui.QLabel(self.piezoA423.name), 1, 0), self.layoutPI.addWidget(self.piezoA423.sb, 1, 1)
layoutPI.addWidget(QtGui.QLabel(shutter423.name), 2, 0), layoutPI.addWidget(shutter423.cb, 2, 1) self.layoutPI.addWidget(QtGui.QLabel(self.shutter423.name), 2, 0), self.layoutPI.addWidget(self.shutter423.cb, 2, 1)
layoutPI.addWidget(QtGui.QLabel(shutterLED.name), 3, 0), layoutPI.addWidget(shutterLED.cb, 3, 1) self.layoutPI.addWidget(QtGui.QLabel(self.shutterLED.name), 3, 0), self.layoutPI.addWidget(self.shutterLED.cb, 3, 1)
layout423_scan.addWidget(QtGui.QLabel('423 Scan piezo A'), 0, 0) self.layout423_scan.addWidget(QtGui.QLabel('423 Scan piezo A'), 0, 0)
layout423_scan.addWidget(QtGui.QLabel('start'), 1, 0), layout423_scan.addWidget(piezoA423.scan_sb_start, 1, 1) self.layout423_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_start, 1, 1)
layout423_scan.addWidget(QtGui.QLabel('stop'), 2, 0), layout423_scan.addWidget(piezoA423.scan_sb_stop, 2, 1) self.layout423_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_stop, 2, 1)
layout423_scan.addWidget(QtGui.QLabel('period'), 3, 0), layout423_scan.addWidget(piezoA423.scan_sb_period, 3, 1) self.layout423_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_period, 3, 1)
layout423_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), layout423_scan.addWidget(piezoA423.scan_button, 4, 1) self.layout423_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout423_scan.addWidget(self.piezoA423.scan_button, 4, 1)
layout423_scan.addWidget(piezoA423.scanLabelValue, 5, 0) self.layout423_scan.addWidget(self.piezoA423.scanLabelValue, 5, 0)
layout423_scan.addWidget(piezoA423.scanpBar, 5, 1) self.layout423_scan.addWidget(self.piezoA423.scanpBar, 5, 1)
######################### #########################
######### trap electrodes ########### ######### trap electrodes ###########
layout_trap_electrodes.addWidget(QtGui.QLabel('Trap electrodes'), 0, 0) self.layout_trap_electrodes.addWidget(QtGui.QLabel('Trap electrodes'), 0, 0)
layout_trap_electrodes.addWidget(QtGui.QLabel(trapDCA.name), 1, 1), layout_trap_electrodes.addWidget(trapDCA.sb, 1, 2) self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapDCA.name), 1, 1), self.layout_trap_electrodes.addWidget(self.trapDCA.sb, 1, 2)
layout_trap_electrodes.addWidget(QtGui.QLabel(trapDCB.name), 2, 1), layout_trap_electrodes.addWidget(trapDCB.sb, 2, 2) self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapDCB.name), 2, 1), self.layout_trap_electrodes.addWidget(self.trapDCB.sb, 2, 2)
layout_trap_electrodes.addWidget(QtGui.QLabel(trapCompC.name), 1, 3), layout_trap_electrodes.addWidget(trapCompC.sb, 1, 4) self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompC.name), 1, 3), self.layout_trap_electrodes.addWidget(self.trapCompC.sb, 1, 4)
layout_trap_electrodes.addWidget(QtGui.QLabel(trapCompD.name), 2, 3), layout_trap_electrodes.addWidget(trapCompD.sb, 2, 4) self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompD.name), 2, 3), self.layout_trap_electrodes.addWidget(self.trapCompD.sb, 2, 4)
########################################################### ###########################################################
#all shutter start in False: #all shutter start in False:
shutters = [shutter397, shutter866, shutter423, shutterLED] self.shutters = [self.shutter397, self.shutter866, self.shutter423, self.shutterLED]
try: try:
for sh in shutters: for sh in self.shutters:
sh.DO.set_out(True) sh.DO.set_out(True)
except: except:
pass pass
############################################################################### ###############################################################################
#read wavemeter # read wavemeter
wavemeter = burleighWM(layoutWM, dWM) self.wavemeter = burleighWM(self.layoutWM, self.dWM)
############################################################################### ###############################################################################
if __name__ == '__main__':
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): app = QtGui.QApplication([])
QtGui.QApplication.instance().exec_() myGuiMainWIndow = GuiMainWindow()
app.setStyleSheet(qdarkstyle.load_stylesheet_from_environment(is_pyqtgraph=True)) # set dark style
app_icon = QtGui.QIcon()
app_icon.addFile('snuffles.png')
app.setWindowIcon(app_icon)
sys.exit(app.exec_())
#if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
# QtGui.QApplication.instance().exec_()
...@@ -7,131 +7,157 @@ Created on Thu Jul 5 12:17:30 2018 ...@@ -7,131 +7,157 @@ Created on Thu Jul 5 12:17:30 2018
from PyQt5.QtCore import QSettings from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QAction, QFileDialog from PyQt5.QtWidgets import QAction, QFileDialog, QInputDialog, QWidget
from threading import Thread from threading import Thread
from webcamROI import roiWindow from webcamROI import roiWindow
#%% #%%
class myToolbarMenu(QWidget):
def save(aos): """
settings = QSettings('C:\\Users\\Usuario\\Documents\\control_app\\config.ini', QSettings.IniFormat) This will create a toolbar menu
settings.beginGroup('Ventana') """
for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
settings.setValue(str(ao.name) + '_' + text, spinb.value())
#print(spinb.value() )
settings.endGroup()
print('saving')
def load(aos):
settings = QSettings('C:\\Users\\Usuario\\Documents\\control_app\\config.ini', QSettings.IniFormat)
settings.beginGroup('Ventana')
for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
spin = settings.value(str(ao.name) + '_' + text)
spinb.setValue( float(spin) )
settings.endGroup()
def first_load(aos):
try:
settings = QSettings('C:\\Users\\Usuario\\Documents\\control_app\\config.ini', QSettings.IniFormat)
except:
print('Warning: no config.ini file in control_app folder. Pleace, be kindful and create one')
return
settings.beginGroup('Ventana')
for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
spin = settings.value(str(ao.name) + '_' + text)
spinb.setValue( float(spin) )
settings.endGroup()
def save_as(aos, window):
name = QFileDialog.getSaveFileName(window, 'Save File')
file = open(name[0], 'w+')
file.close()
settings = QSettings(name[0], QSettings.IniFormat)
settings.beginGroup('Ventana')
for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
settings.setValue(str(ao.name) + '_' + text, spinb.value())
#print(spinb.value() )
settings.endGroup()
print('saving to %s' % name[0])
def open_from(aos, window):
name = QFileDialog.getOpenFileName(window, 'Save File')
settings = QSettings(name[0], QSettings.IniFormat)
settings.beginGroup('Ventana')
for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
spin = settings.value(str(ao.name) + '_' + text)
spinb.setValue( float(spin) )
settings.endGroup()
def startWebcamsThread():
exec(open('C:\\Users\\Usuario\\Documents\\control_app\\webcams.py').read())
def putWebcams(checked): def __init__(self, win, analog_control_signals):
if checked: super().__init__()
t_webcams = Thread(target=startWebcamsThread, args=())
t_webcams.start() self.MainGuiWindow = win
else: self.aos = analog_control_signals
pass
self.first_load(self.aos)
self.incorporate_toolbar(self.MainGuiWindow, self.aos)
self.createAosDict()
def openRoi(): def createAosDict(self):
print('opening roi window') analogs = self.aos
#t_roi = Thread(target=startRoiThread, args=()) self.aosDicc = {}
#t_roi.start() for i in range(len(analogs)):
startRoiThread() self.aosDicc[analogs[i].name] = analogs[i]
def incorporate_toolbar(self, win, analog_control_signals):
def startRoiThread():
roiW = roiWindow()
roiW.w.show()
menubar = win.menuBar()
def incorporate_toolbar(win, analog_control_signals): saveAct = QAction('Save', win)
loadAct = QAction('Load', win)
menubar = win.menuBar() saveAsAct = QAction('Save as' , win)
openFromAct = QAction('open from', win)
win.statusBar()
menubar = win.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(saveAct)
fileMenu.addAction(loadAct)
fileMenu.addAction(saveAsAct)
fileMenu.addAction(openFromAct)
viewMenu = menubar.addMenu('Monitor')
viewWebcams = QAction('View webcams', win, checkable=True)
viewWebcams.setChecked(False)
viewMenu.addAction(viewWebcams)
roiMenu = menubar.addMenu('Roi')
plotRoi = QAction('Open roi plot', win)
roiMenu.addAction(plotRoi)
saveAct.triggered.connect(lambda: self.save(analog_control_signals))
loadAct.triggered.connect(lambda: self.load(analog_control_signals))
saveAsAct.triggered.connect(lambda: self.save_as(analog_control_signals, win))
openFromAct.triggered.connect(lambda: self.open_from(analog_control_signals, win))
viewWebcams.toggled.connect(lambda: self.putWebcams(viewWebcams.isChecked()) )
plotRoi.triggered.connect(self.openRoi)
saveAct = QAction('Save', win) def save(self, aos):
loadAct = QAction('Load', win) settings = QSettings('C:\\Users\\Usuario\\Documents\\control_app\\config.ini', QSettings.IniFormat)
saveAsAct = QAction('Save as' , win) settings.beginGroup('Ventana')
openFromAct = QAction('open from', win) for ao in aos:
spin_boxes = ao.spin_boxes
win.statusBar()
menubar = win.menuBar() for text, spinb in spin_boxes:
fileMenu = menubar.addMenu('&File') settings.setValue(str(ao.name) + '_' + text, spinb.value())
#print(spinb.value() )
fileMenu.addAction(saveAct) settings.endGroup()
fileMenu.addAction(loadAct) print('saving')
fileMenu.addAction(saveAsAct)
fileMenu.addAction(openFromAct) def load(self, aos):
settings = QSettings('C:\\Users\\Usuario\\Documents\\control_app\\config.ini', QSettings.IniFormat)
settings.beginGroup('Ventana')
viewMenu = menubar.addMenu('Monitor') for ao in aos:
viewWebcams = QAction('View webcams', win, checkable=True) spin_boxes = ao.spin_boxes
viewWebcams.setChecked(False) for text, spinb in spin_boxes:
viewMenu.addAction(viewWebcams) spin = settings.value(str(ao.name) + '_' + text)
spinb.setValue( float(spin) )
roiMenu = menubar.addMenu('Roi') settings.endGroup()
plotRoi = QAction('Open roi plot', win)
roiMenu.addAction(plotRoi) def first_load(self, aos):
try:
saveAct.triggered.connect(lambda: save(analog_control_signals)) settings = QSettings('C:\\Users\\Usuario\\Documents\\control_app\\config.ini', QSettings.IniFormat)
loadAct.triggered.connect(lambda: load(analog_control_signals)) except:
saveAsAct.triggered.connect(lambda: save_as(analog_control_signals, win)) print('Warning: no config.ini file in control_app folder. Pleace, be kindful and create one')
openFromAct.triggered.connect(lambda: open_from(analog_control_signals, win)) return
viewWebcams.toggled.connect(lambda: putWebcams(viewWebcams.isChecked()) )
plotRoi.triggered.connect(openRoi) settings.beginGroup('Ventana')
\ No newline at end of file for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
spin = settings.value(str(ao.name) + '_' + text)
spinb.setValue( float(spin) )
settings.endGroup()
def save_as(self, aos, window):
name = QFileDialog.getSaveFileName(window, 'Save File')
file = open(name[0], 'w+')
file.close()
settings = QSettings(name[0], QSettings.IniFormat)
settings.beginGroup('Ventana')
for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
settings.setValue(str(ao.name) + '_' + text, spinb.value())
#print(spinb.value() )
settings.endGroup()
print('saving to %s' % name[0])
def open_from(self, aos, window):
name = QFileDialog.getOpenFileName(window, 'Save File')
settings = QSettings(name[0], QSettings.IniFormat)
settings.beginGroup('Ventana')
for ao in aos:
spin_boxes = ao.spin_boxes
for text, spinb in spin_boxes:
spin = settings.value(str(ao.name) + '_' + text)
spinb.setValue( float(spin) )
settings.endGroup()
def startWebcamsThread(self):
exec(open('C:\\Users\\Usuario\\Documents\\control_app\\webcams.py').read())
def putWebcams(self, checked):
if checked:
t_webcams = Thread(target=self.startWebcamsThread, args=())
t_webcams.start()
else:
pass
def openRoi(self):
print('opening roi window')
ao = self.getChoiceForRoi()
self.startRoiThread(ao)
def startRoiThread(self, ao):
self.roiW = roiWindow(ao)
self.roiW.w.show()
def getChoiceForRoi(self):
items = self.aosDicc.keys()
item, okPressed = QInputDialog.getItem(self, "Get item","Color:", items, 0, False)
if okPressed and item:
return self.aosDicc[item]
\ No newline at end of file
...@@ -11,16 +11,21 @@ import numpy as np ...@@ -11,16 +11,21 @@ import numpy as np
import pyqtgraph as pg import pyqtgraph as pg
import cv2 import cv2
from PyQt5.QtCore import QTimer from PyQt5.QtCore import QTimer
#from myWidgets import anal_control_signal
import sys import sys
from PyQt5.QtWidgets import QMainWindow, QApplication from PyQt5.QtWidgets import QMainWindow, QApplication, QMessageBox, QPushButton, QGraphicsProxyWidget
class roiWindow(QMainWindow): class roiWindow(QMainWindow):
def __init__(self): def __init__(self, aoScan):
super().__init__() super().__init__()
self.aoScan = aoScan
print(self.aoScan.name, self.aoScan.sb.val)
self.cap = cv2.VideoCapture(1) self.cap = cv2.VideoCapture(1)
...@@ -30,7 +35,7 @@ class roiWindow(QMainWindow): ...@@ -30,7 +35,7 @@ class roiWindow(QMainWindow):
self.rois = [] self.rois = []
#self.rois.append(pg.EllipseROI([110, 10], [30, 20], pen=(3,9))) #self.rois.append(pg.EllipseROI([110, 10], [30, 20], pen=(3,9)))
self.rois.append(pg.TestROI([0, 0], [20, 20], pen=(0,9))) self.rois.append(pg.TestROI([500, 500], [100, 100], pen=(0,9)))
self.initUI() self.initUI()
...@@ -48,23 +53,38 @@ class roiWindow(QMainWindow): ...@@ -48,23 +53,38 @@ class roiWindow(QMainWindow):
self.imgTimer = QTimer() self.imgTimer = QTimer()
self.imgTimer.timeout.connect(self.updateImage) self.imgTimer.timeout.connect(self.updateImage)
self.imgTimer.start(10) self.imgTimer.start(2)
self.im2 = pg.ImageItem() self.im2 = pg.ImageItem()
self.v2 = self.w.addViewBox(1,0) self.v2 = self.w.addViewBox(1,0)
self.v2.addItem(self.im2) self.v2.addItem(self.im2)
#plot real time
self.p = self.w.addPlot(row = 3, col = 0, title="Updating plot") self.p = self.w.addPlot(row = 3, col = 0, title="Updating plot")
self.p.setRange(QtCore.QRectF(0, -10, 5000, 20)) self.p.setRange(QtCore.QRectF(0, -10, 5000, 20))
self.p.setAutoPan(y=True) self.p.setAutoPan(y=True)
self.p.setRange(xRange = (0, self.n), yRange = (0, 255)) self.p.setRange(xRange = (0, self.n), yRange = (0, 255))
self.curve = self.p.plot(pen='y') self.curve = self.p.plot(pen='y')
self.pv = self.w.addPlot(row = 4, col = 0, title = "Updating plot")
self.pv.setRange(QtCore.QRectF(0, -10, 5000, 20))
self.pv.setAutoPan(y=True)
self.curveVoltage = self.pv.plot(pen='y')
self.voltageDataX = []
self.voltageDataY = []
self.aoScan.ScanTimer.timeout.connect(self.updateVoltagePlotvsI)
self.eraseButton = QPushButton('Erase')
self.eraseButton.clicked.connect(self.erasePlot)
proxy = QGraphicsProxyWidget()
proxy.setWidget(self.eraseButton)
self.pv.addItem(proxy,row=1,col=1)
self.lastRoi = None self.lastRoi = None
self.newData = 0
## Add each ROI to the scene and link its data to a plot curve with the same color ## Add each ROI to the scene and link its data to a plot curve with the same color
for r in self.rois: for r in self.rois:
...@@ -72,8 +92,38 @@ class roiWindow(QMainWindow): ...@@ -72,8 +92,38 @@ class roiWindow(QMainWindow):
r.sigRegionChanged.connect(self.updateRoi) r.sigRegionChanged.connect(self.updateRoi)
self.w.show() self.w.show()
self.w.closeEvent = self.myCloseEvent
def updateVoltagePlotvsI(self):
#plot against voltage
self.voltageDataX = np.append(self.voltageDataX, self.aoScan.scan_step)
self.voltageDataY = np.append(self.voltageDataY, self.newData)
#○print(' Roi: ', self.voltageDataX[-1], self.voltageDataY[-1])
self.pv.setRange(xRange = (float(self.aoScan.scan_sb_start.val), float(self.aoScan.scan_sb_stop.val)), yRange = (0, 255))
self.curveVoltage.setData(self.voltageDataX, self.voltageDataY)
def erasePlot(self):
self.voltageDataX = []
self.voltageDataY = []
def myCloseEvent(self, event):
# this overrides the closeEvent method
reply = QMessageBox.question(self, 'Message',
"Quit roi analysis screen?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
self.imgTimer.stop()
self.cap.release()
cv2.destroyAllWindows()
event.accept()
else:
event.ignore()
def capture(self): def capture(self):
ret, frame = self.cap.read() ret, frame = self.cap.read()
#frame = cv2.resize(frame, None, fx = 0.5, fy = 0.5, interpolation = cv2.INTER_CUBIC) #frame = cv2.resize(frame, None, fx = 0.5, fy = 0.5, interpolation = cv2.INTER_CUBIC)
...@@ -91,8 +141,8 @@ class roiWindow(QMainWindow): ...@@ -91,8 +141,8 @@ class roiWindow(QMainWindow):
self.lastRoi = roi self.lastRoi = roi
roiSlice = roi.getArrayRegion(self.im1.image, img=self.im1) roiSlice = roi.getArrayRegion(self.im1.image, img=self.im1)
self.im2.setImage(roiSlice) self.im2.setImage(roiSlice)
newData = np.mean(roiSlice) self.newData = np.mean(roiSlice)
self.data[self.i] = newData self.data[self.i] = self.newData
self.i = np.mod(self.i + 1, len(self.data)) self.i = np.mod(self.i + 1, len(self.data))
self.curve.setData(self.data) self.curve.setData(self.data)
...@@ -101,10 +151,12 @@ class roiWindow(QMainWindow): ...@@ -101,10 +151,12 @@ class roiWindow(QMainWindow):
self.curve.setData(data) self.curve.setData(data)
#app.processEvents() ## force complete redraw for every plot #app.processEvents() ## force complete redraw for every plot
if __name__ == '__main__': if __name__ == '__main__':
ao = anal_control_signal('ao', 0)
app = QApplication(sys.argv) app = QApplication(sys.argv)
ex = roiWindow() ex = roiWindow(ao)
sys.exit(app.exec_()) sys.exit(app.exec_())
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment