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
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 PyQt5.QtWidgets import QMainWindow
from pyqtgraph import dockarea
import pyqtgraph as pg
import myToolbar
from myToolbar import myToolbarMenu
import qdarkstyle
import os
os.environ['PYQTGRAPH_QT_LIB'] = 'PyQt5'
###############################################################################
#This creates the window for the gui
app = QtGui.QApplication([])
app.setStyleSheet(qdarkstyle.load_stylesheet_from_environment(is_pyqtgraph=True)) # set dark style
win = QtGui.QMainWindow()
win.setWindowTitle('My GUI')
win.setWindowIcon(QtGui.QIcon('snuffles.png'))
app_icon = QtGui.QIcon()
app_icon.addFile('snuffles.png')
app.setWindowIcon(app_icon)
area = dockarea.DockArea()
win.setCentralWidget(area)
cw = QtGui.QWidget()
win.show()
class GuiMainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.win = QtGui.QMainWindow()
self.win.setWindowTitle('My GUI')
self.win.setWindowIcon(QtGui.QIcon('snuffles.png'))
self.area = dockarea.DockArea()
self.win.setCentralWidget(self.area)
self.cw = QtGui.QWidget()
self.win.show()
###############################################################################
# Here I create the layouts
layout397 = pg.LayoutWidget()
layout866 = pg.LayoutWidget()
layoutPI = pg.LayoutWidget()
layoutIMG = pg.LayoutWidget()
layoutWM = pg.LayoutWidget()
layout397_scan = pg.LayoutWidget()
layout866_scan = pg.LayoutWidget()
layout423_scan = pg.LayoutWidget()
layout_trap_electrodes = pg.LayoutWidget()
layout_activate = pg.LayoutWidget()
# Here I create the docks
s1 = 100
s2 = 100
d397 = dockarea.Dock("Dock397", size=(s1, s2))
d866 = dockarea.Dock("Dock866", size=(s1, s2))
dPI = dockarea.Dock("DockPI", size=(s1, s2))
dWM = dockarea.Dock("DockWM", size=(s1, s2))
d397_scan = dockarea.Dock("Dock 397 scan", size=(s1, s2))
d866_scan = dockarea.Dock("Dock 866 scan", size=(s1, s2))
d423_scan = dockarea.Dock("Dock 423 scan", size=(s1, s2))
dtrap_electrodes = dockarea.Dock("Dock Trap Electrodes", size=(s1, s2))
dactivate = dockarea.Dock(" ", hideTitle=False, size = (s1/4, s2))
dactivate.hideTitleBar()
# Here I add the docks
area.addDock( dtrap_electrodes)
area.addDock(d397, 'bottom', dtrap_electrodes)
area.addDock(d866, 'bottom', d397)
area.addDock(dPI, 'bottom', d866)
area.addDock(dWM, 'bottom', dPI)
area.addDock(d397_scan, 'right', d397)
area.addDock(d423_scan, 'right', dPI)
area.addDock(d866_scan, 'right', d866)
area.addDock(dactivate, 'right', dtrap_electrodes)
area.moveDock(dWM, 'above', dtrap_electrodes)
# Here I add the layouts to the corresponding dock
d397.addWidget(layout397)
d866.addWidget(layout866)
dPI.addWidget(layoutPI)
dWM.addWidget(layoutWM)
d397_scan.addWidget(layout397_scan)
d866_scan.addWidget(layout866_scan)
d423_scan.addWidget(layout423_scan)
dtrap_electrodes.addWidget(layout_trap_electrodes)
dactivate.addWidget(layout_activate)
# Here I create the layouts
self.layout397 = pg.LayoutWidget()
self.layout866 = pg.LayoutWidget()
self.layoutPI = pg.LayoutWidget()
self.layoutIMG = pg.LayoutWidget()
self.layoutWM = pg.LayoutWidget()
self.layout397_scan = pg.LayoutWidget()
self.layout866_scan = pg.LayoutWidget()
self.layout423_scan = pg.LayoutWidget()
self.layout_trap_electrodes = pg.LayoutWidget()
self.layout_activate = pg.LayoutWidget()
# Here I create the docks
self.s1 = 100
self.s2 = 100
self.d397 = dockarea.Dock("Dock397", size=(self.s1, self.s2))
self.d866 = dockarea.Dock("Dock866", size=(self.s1, self.s2))
self.dPI = dockarea.Dock("DockPI", size=(self.s1, self.s2))
self.dWM = dockarea.Dock("DockWM", size=(self.s1, self.s2))
self.d397_scan = dockarea.Dock("Dock 397 scan", size=(self.s1, self.s2))
self.d866_scan = dockarea.Dock("Dock 866 scan", size=(self.s1, self.s2))
self.d423_scan = dockarea.Dock("Dock 423 scan", size=(self.s1, self.s2))
self.dtrap_electrodes = dockarea.Dock("Dock Trap Electrodes", size=(self.s1, self.s2))
self.dactivate = dockarea.Dock(" ", hideTitle=False, size = (self.s1/4, self.s2))
self.dactivate.hideTitleBar()
# Here I add the docks
self.area.addDock( self.dtrap_electrodes)
self.area.addDock(self.d397, 'bottom', self.dtrap_electrodes)
self.area.addDock(self.d866, 'bottom', self.d397)
self.area.addDock(self.dPI, 'bottom', self.d866)
self.area.addDock(self.dWM, 'bottom', self.dPI)
self.area.addDock(self.d397_scan, 'right', self.d397)
self.area.addDock(self.d423_scan, 'right', self.dPI)
self.area.addDock(self.d866_scan, 'right', self.d866)
self.area.addDock(self.dactivate, 'right', self.dtrap_electrodes)
self.area.moveDock(self.dWM, 'above', self.dtrap_electrodes)
# Here I add the layouts to the corresponding dock
self.d397.addWidget(self.layout397)
self.d866.addWidget(self.layout866)
self.dPI.addWidget(self.layoutPI)
self.dWM.addWidget(self.layoutWM)
self.d397_scan.addWidget(self.layout397_scan)
self.d866_scan.addWidget(self.layout866_scan)
self.d423_scan.addWidget(self.layout423_scan)
self.dtrap_electrodes.addWidget(self.layout_trap_electrodes)
self.dactivate.addWidget(self.layout_activate)
############ creating the controls ########################
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)
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)
piezoA423 = anal_control_signal('piezoA423', 1, out_step = 0.01)
trapDCA = anal_control_signal('DC A', 2)
trapDCB = anal_control_signal('DC B', 3)
trapCompC = anal_control_signal('Comp C', 4)
trapCompD = anal_control_signal('Comp D', 5)
shutter397 = digital_control_signal('shutter397', 0)
shutter866 = digital_control_signal('shutter866', 2)
shutter423 = digital_control_signal('shutter423', 1)
shutterLED = digital_control_signal('shutterLED', 3)
self.piezoA397 = anal_control_signal('piezoA397', 13, out_minimum=0, out_maximum=4, out_step=0.01)
self.piezoB397 = anal_control_signal('piezoB397', 7, out_step = 0.01)
self.piezoA866 = anal_control_signal('piezoA866', 14, out_minimum=0, out_maximum=4, out_step=0.01)
self.piezoB866 = anal_control_signal('piezoB866', 6, out_step = 0.01)
self.piezoA423 = anal_control_signal('piezoA423', 1, out_step = 0.01)
self.trapDCA = anal_control_signal('DC A', 2)
self.trapDCB = anal_control_signal('DC B', 3)
self.trapCompC = anal_control_signal('Comp C', 4)
self.trapCompD = anal_control_signal('Comp D', 5)
self.shutter397 = digital_control_signal('shutter397', 0)
self.shutter866 = digital_control_signal('shutter866', 2)
self.shutter423 = digital_control_signal('shutter423', 1)
self.shutterLED = digital_control_signal('shutterLED', 3)
#############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:
for ao in anal_control_signal._registry:
ao.connectSpinBoxesToDaq()
#here I connect the spinboxes to the daq analog outputs:
for ao in anal_control_signal._registry:
ao.connectSpinBoxesToDaq()
###############################################################################
#activate button
actB = activation_button()
layout_activate.addWidget(actB.button)
#activate button
self.actB = activation_button()
self.layout_activate.addWidget(self.actB.button)
###############################################################################
#Adding the controls:
######### 397 ###########
layout397.addWidget(QtGui.QLabel('397'), 0, 0)
layout397.addWidget(QtGui.QLabel(piezoA397.name), 1, 0), layout397.addWidget(piezoA397.sb, 1, 1)
layout397.addWidget(QtGui.QLabel(piezoB397.name), 2, 0), layout397.addWidget(piezoB397.sb, 2, 1)
layout397.addWidget(QtGui.QLabel(shutter397.name), 3, 0), layout397.addWidget(shutter397.cb, 3, 1)
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)
layout397_scan.addWidget(QtGui.QLabel('stop'), 2, 0), layout397_scan.addWidget(piezoB397.scan_sb_stop, 2, 1)
layout397_scan.addWidget(QtGui.QLabel('period'), 3, 0), layout397_scan.addWidget(piezoB397.scan_sb_period, 3, 1)
layout397_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), layout397_scan.addWidget(piezoB397.scan_button, 4, 1)
layout397_scan.addWidget(piezoB397.scanLabelValue, 5, 0)
layout397_scan.addWidget(piezoB397.scanpBar, 5, 1)
#########################
######### 866 ###########
layout866.addWidget(QtGui.QLabel('866'), 0, 0)
layout866.addWidget(QtGui.QLabel(piezoA866.name), 1, 0), layout866.addWidget(piezoA866.sb, 1, 1)
layout866.addWidget(QtGui.QLabel(piezoB866.name), 2, 0), layout866.addWidget(piezoB866.sb, 2, 1)
layout866.addWidget(QtGui.QLabel(shutter866.name), 3, 0), layout866.addWidget(shutter866.cb, 3, 1)
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)
layout866_scan.addWidget(QtGui.QLabel('stop'), 2, 0), layout866_scan.addWidget(piezoB866.scan_sb_stop, 2, 1)
layout866_scan.addWidget(QtGui.QLabel('period'), 3, 0), layout866_scan.addWidget(piezoB866.scan_sb_period, 3, 1)
layout866_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), layout866_scan.addWidget(piezoB866.scan_button, 4, 1)
layout866_scan.addWidget(piezoB866.scanLabelValue, 5, 0)
layout866_scan.addWidget(piezoB866.scanpBar, 5, 1)
#########################
######### PI ###########
layoutPI.addWidget(QtGui.QLabel('Photoion'), 0, 0)
layoutPI.addWidget(QtGui.QLabel(piezoA423.name), 1, 0), layoutPI.addWidget(piezoA423.sb, 1, 1)
layoutPI.addWidget(QtGui.QLabel(shutter423.name), 2, 0), layoutPI.addWidget(shutter423.cb, 2, 1)
layoutPI.addWidget(QtGui.QLabel(shutterLED.name), 3, 0), layoutPI.addWidget(shutterLED.cb, 3, 1)
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)
layout423_scan.addWidget(QtGui.QLabel('stop'), 2, 0), layout423_scan.addWidget(piezoA423.scan_sb_stop, 2, 1)
layout423_scan.addWidget(QtGui.QLabel('period'), 3, 0), layout423_scan.addWidget(piezoA423.scan_sb_period, 3, 1)
layout423_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), layout423_scan.addWidget(piezoA423.scan_button, 4, 1)
layout423_scan.addWidget(piezoA423.scanLabelValue, 5, 0)
layout423_scan.addWidget(piezoA423.scanpBar, 5, 1)
#########################
######### trap electrodes ###########
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)
layout_trap_electrodes.addWidget(QtGui.QLabel(trapDCB.name), 2, 1), layout_trap_electrodes.addWidget(trapDCB.sb, 2, 2)
layout_trap_electrodes.addWidget(QtGui.QLabel(trapCompC.name), 1, 3), layout_trap_electrodes.addWidget(trapCompC.sb, 1, 4)
layout_trap_electrodes.addWidget(QtGui.QLabel(trapCompD.name), 2, 3), layout_trap_electrodes.addWidget(trapCompD.sb, 2, 4)
#Adding the controls:
######### 397 ###########
self.layout397.addWidget(QtGui.QLabel('397'), 0, 0)
self.layout397.addWidget(QtGui.QLabel(self.piezoA397.name), 1, 0), self.layout397.addWidget(self.piezoA397.sb, 1, 1)
self.layout397.addWidget(QtGui.QLabel(self.piezoB397.name), 2, 0), self.layout397.addWidget(self.piezoB397.sb, 2, 1)
self.layout397.addWidget(QtGui.QLabel(self.shutter397.name), 3, 0), self.layout397.addWidget(self.shutter397.cb, 3, 1)
self.layout397_scan.addWidget(QtGui.QLabel('397 Scan piezo B'), 0, 0)
self.layout397_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_start, 1, 1)
self.layout397_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_stop, 2, 1)
self.layout397_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout397_scan.addWidget(self.piezoB397.scan_sb_period, 3, 1)
self.layout397_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout397_scan.addWidget(self.piezoB397.scan_button, 4, 1)
self.layout397_scan.addWidget(self.piezoB397.scanLabelValue, 5, 0)
self.layout397_scan.addWidget(self.piezoB397.scanpBar, 5, 1)
#########################
######### 866 ###########
self.layout866.addWidget(QtGui.QLabel('866'), 0, 0)
self.layout866.addWidget(QtGui.QLabel(self.piezoA866.name), 1, 0), self.layout866.addWidget(self.piezoA866.sb, 1, 1)
self.layout866.addWidget(QtGui.QLabel(self.piezoB866.name), 2, 0), self.layout866.addWidget(self.piezoB866.sb, 2, 1)
self.layout866.addWidget(QtGui.QLabel(self.shutter866.name), 3, 0), self.layout866.addWidget(self.shutter866.cb, 3, 1)
self.layout866_scan.addWidget(QtGui.QLabel('866 Scan piezo B'), 0, 0)
self.layout866_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_start, 1, 1)
self.layout866_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_stop, 2, 1)
self.layout866_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout866_scan.addWidget(self.piezoB866.scan_sb_period, 3, 1)
self.layout866_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout866_scan.addWidget(self.piezoB866.scan_button, 4, 1)
self.layout866_scan.addWidget(self.piezoB866.scanLabelValue, 5, 0)
self.layout866_scan.addWidget(self.piezoB866.scanpBar, 5, 1)
#########################
######### PI ###########
self.layoutPI.addWidget(QtGui.QLabel('Photoion'), 0, 0)
self.layoutPI.addWidget(QtGui.QLabel(self.piezoA423.name), 1, 0), self.layoutPI.addWidget(self.piezoA423.sb, 1, 1)
self.layoutPI.addWidget(QtGui.QLabel(self.shutter423.name), 2, 0), self.layoutPI.addWidget(self.shutter423.cb, 2, 1)
self.layoutPI.addWidget(QtGui.QLabel(self.shutterLED.name), 3, 0), self.layoutPI.addWidget(self.shutterLED.cb, 3, 1)
self.layout423_scan.addWidget(QtGui.QLabel('423 Scan piezo A'), 0, 0)
self.layout423_scan.addWidget(QtGui.QLabel('start'), 1, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_start, 1, 1)
self.layout423_scan.addWidget(QtGui.QLabel('stop'), 2, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_stop, 2, 1)
self.layout423_scan.addWidget(QtGui.QLabel('period'), 3, 0), self.layout423_scan.addWidget(self.piezoA423.scan_sb_period, 3, 1)
self.layout423_scan.addWidget(QtGui.QLabel('Scanning'), 4, 0), self.layout423_scan.addWidget(self.piezoA423.scan_button, 4, 1)
self.layout423_scan.addWidget(self.piezoA423.scanLabelValue, 5, 0)
self.layout423_scan.addWidget(self.piezoA423.scanpBar, 5, 1)
#########################
######### trap electrodes ###########
self.layout_trap_electrodes.addWidget(QtGui.QLabel('Trap electrodes'), 0, 0)
self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapDCA.name), 1, 1), self.layout_trap_electrodes.addWidget(self.trapDCA.sb, 1, 2)
self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapDCB.name), 2, 1), self.layout_trap_electrodes.addWidget(self.trapDCB.sb, 2, 2)
self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompC.name), 1, 3), self.layout_trap_electrodes.addWidget(self.trapCompC.sb, 1, 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:
shutters = [shutter397, shutter866, shutter423, shutterLED]
try:
for sh in shutters:
sh.DO.set_out(True)
except:
pass
#all shutter start in False:
self.shutters = [self.shutter397, self.shutter866, self.shutter423, self.shutterLED]
try:
for sh in self.shutters:
sh.DO.set_out(True)
except:
pass
###############################################################################
#read wavemeter
# read wavemeter
wavemeter = burleighWM(layoutWM, dWM)
self.wavemeter = burleighWM(self.layoutWM, self.dWM)
###############################################################################
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
if __name__ == '__main__':
app = QtGui.QApplication([])
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
from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QAction, QFileDialog
from PyQt5.QtWidgets import QAction, QFileDialog, QInputDialog, QWidget
from threading import Thread
from webcamROI import roiWindow
#%%
def save(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:
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())
class myToolbarMenu(QWidget):
"""
This will create a toolbar menu
"""
def putWebcams(checked):
if checked:
t_webcams = Thread(target=startWebcamsThread, args=())
t_webcams.start()
else:
pass
def __init__(self, win, analog_control_signals):
super().__init__()
self.MainGuiWindow = win
self.aos = analog_control_signals
self.first_load(self.aos)
self.incorporate_toolbar(self.MainGuiWindow, self.aos)
self.createAosDict()
def openRoi():
print('opening roi window')
#t_roi = Thread(target=startRoiThread, args=())
#t_roi.start()
startRoiThread()
def startRoiThread():
roiW = roiWindow()
roiW.w.show()
def createAosDict(self):
analogs = self.aos
self.aosDicc = {}
for i in range(len(analogs)):
self.aosDicc[analogs[i].name] = analogs[i]
def incorporate_toolbar(self, win, analog_control_signals):
menubar = win.menuBar()
def incorporate_toolbar(win, analog_control_signals):
menubar = win.menuBar()
saveAct = QAction('Save', win)
loadAct = QAction('Load', win)
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)
loadAct = QAction('Load', win)
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: save(analog_control_signals))
loadAct.triggered.connect(lambda: load(analog_control_signals))
saveAsAct.triggered.connect(lambda: save_as(analog_control_signals, win))
openFromAct.triggered.connect(lambda: open_from(analog_control_signals, win))
viewWebcams.toggled.connect(lambda: putWebcams(viewWebcams.isChecked()) )
plotRoi.triggered.connect(openRoi)
\ No newline at end of file
def save(self, 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:
settings.setValue(str(ao.name) + '_' + text, spinb.value())
#print(spinb.value() )
settings.endGroup()
print('saving')
def load(self, 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(self, 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(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
import pyqtgraph as pg
import cv2
from PyQt5.QtCore import QTimer
#from myWidgets import anal_control_signal
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtWidgets import QMainWindow, QApplication, QMessageBox, QPushButton, QGraphicsProxyWidget
class roiWindow(QMainWindow):
def __init__(self):
def __init__(self, aoScan):
super().__init__()
self.aoScan = aoScan
print(self.aoScan.name, self.aoScan.sb.val)
self.cap = cv2.VideoCapture(1)
......@@ -30,7 +35,7 @@ class roiWindow(QMainWindow):
self.rois = []
#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()
......@@ -48,23 +53,38 @@ class roiWindow(QMainWindow):
self.imgTimer = QTimer()
self.imgTimer.timeout.connect(self.updateImage)
self.imgTimer.start(10)
self.imgTimer.start(2)
self.im2 = pg.ImageItem()
self.v2 = self.w.addViewBox(1,0)
self.v2.addItem(self.im2)
#plot real time
self.p = self.w.addPlot(row = 3, col = 0, title="Updating plot")
self.p.setRange(QtCore.QRectF(0, -10, 5000, 20))
self.p.setAutoPan(y=True)
self.p.setRange(xRange = (0, self.n), yRange = (0, 255))
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.newData = 0
## Add each ROI to the scene and link its data to a plot curve with the same color
for r in self.rois:
......@@ -72,8 +92,38 @@ class roiWindow(QMainWindow):
r.sigRegionChanged.connect(self.updateRoi)
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):
ret, frame = self.cap.read()
#frame = cv2.resize(frame, None, fx = 0.5, fy = 0.5, interpolation = cv2.INTER_CUBIC)
......@@ -91,8 +141,8 @@ class roiWindow(QMainWindow):
self.lastRoi = roi
roiSlice = roi.getArrayRegion(self.im1.image, img=self.im1)
self.im2.setImage(roiSlice)
newData = np.mean(roiSlice)
self.data[self.i] = newData
self.newData = np.mean(roiSlice)
self.data[self.i] = self.newData
self.i = np.mod(self.i + 1, len(self.data))
self.curve.setData(self.data)
......@@ -101,10 +151,12 @@ class roiWindow(QMainWindow):
self.curve.setData(data)
#app.processEvents() ## force complete redraw for every plot
if __name__ == '__main__':
ao = anal_control_signal('ao', 0)
app = QApplication(sys.argv)
ex = roiWindow()
ex = roiWindow(ao)
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