# -*- coding: utf-8 -*- """ Created on Thu May 31 14:22:48 2018 @author: Usuario """ import sys from pyqtgraph.Qt import QtGui from resources.myWidgets import anal_control_signal, digital_control_signal, activation_button, burleighWM, coherentWM, kick_ions_hard, kick_ions_soft from PyQt5.QtWidgets import QMainWindow, QPushButton from PyQt5.QtCore import QTimer from pyqtgraph import dockarea import pyqtgraph as pg from resources.myToolbar import myToolbarMenu import qdarkstyle import os os.environ['PYQTGRAPH_QT_LIB'] = 'PyQt5' ############################################################################### 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 self.layout397 = pg.LayoutWidget() self.layout866 = pg.LayoutWidget() self.layoutPI = pg.LayoutWidget() self.layoutIMG = pg.LayoutWidget() self.layoutWM = pg.LayoutWidget() self.layoutWM_coherent = 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.dWM_coherent = dockarea.Dock("DockWM_coherent", 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.dWM) self.area.addDock(self.dWM_coherent) self.area.addDock(self.dPI, 'bottom', self.dWM) 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) self.area.moveDock(self.dWM_coherent, 'above', self.dWM) self.area.moveDock(self.dPI, 'above', self.d423_scan) # 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.dWM_coherent.addWidget(self.layoutWM_coherent) 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 ######################## self.piezoA397 = anal_control_signal('piezoA397', 13, ao_type ='cavity_piezo' , out_minimum=0, out_maximum=4, out_step=0.01) self.piezoB397 = anal_control_signal('piezoB397', 7, ao_type ='cavity_piezo', out_step = 0.01) self.piezoA866 = anal_control_signal('piezoA866', 14, ao_type ='cavity_piezo', out_minimum=0, out_maximum=4, out_step=0.01) self.piezoB866 = anal_control_signal('piezoB866', 9, ao_type ='cavity_piezo', out_step = 0.01, out_minimum= -2, out_maximum= 10) self.piezoA423 = anal_control_signal('piezoA423', 8, ao_type ='laser_piezo', out_step = 0.01) self.trapDCA = anal_control_signal('DC A', 2, ao_type ='electrode') self.trapDCB = anal_control_signal('DC B', 1, ao_type ='electrode') self.trapCompC = anal_control_signal('Comp C', 4, ao_type ='electrode') self.trapCompC.sb.setEnabled(False) self.trapCompD = anal_control_signal('Comp D', 5, ao_type ='electrode') self.trapCompOven = anal_control_signal('Comp Oven', 0, ao_type ='electrode') self.trapCompExYb = anal_control_signal('Comp Ex Yb', 6, ao_type ='electrode') 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) self.soft_kick_button = QPushButton('kick!') self.soft_kick_button.clicked.connect(lambda: kick_ions_soft(self.shutter866, self.trapDCA, self.trapDCB)) self.hard_kick_button = QPushButton('kick!!') self.hard_kick_button.clicked.connect(lambda: kick_ions_hard(self.shutter866, self.trapDCA, self.trapDCB)) #############Toolbar and initial loading of config ############################ self.toolbar = myToolbarMenu(self.win, anal_control_signal._registry ) self.toolbar.load(anal_control_signal._registry) #print('Defined analog outputs: \n', self.toolbar.aosDicc.keys()) self.autosave_timer = QTimer() self.autosave_timer.timeout.connect(lambda: self.toolbar.save(anal_control_signal._registry)) self.autosave_timer.start(10000) ############################################################################### #here I connect the spinboxes to the daq analog outputs: for ao in anal_control_signal._registry: ao.connectSpinBoxesToDaq() print('Analog control pinout:') for ao in anal_control_signal._registry: print(ao.name + ' -> ' + 'ao' + str(ao.ch)) ############################################################################### #activate button self.actB = activation_button() self.layout_activate.addWidget(self.actB.button) ############################################################################### #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.addWidget(QtGui.QLabel("866 WM"), 3, 2), self.layout866.addWidget(self.shutterLED.cb, 3, 3) self.layout866.addWidget(QtGui.QLabel("Blink"), 4, 0), self.layout866.addWidget(self.shutter866.blink_cb, 4, 1) self.layout866.addWidget(self.layout866.addWidget(self.shutter866.blink_time_sb, 4, 2)) 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(self.soft_kick_button, 1, 0) self.layout_trap_electrodes.addWidget(self.hard_kick_button, 2, 0) 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) self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompOven.name), 1, 5), self.layout_trap_electrodes.addWidget(self.trapCompOven.sb, 1, 6) self.layout_trap_electrodes.addWidget(QtGui.QLabel(self.trapCompExYb.name), 2, 5), self.layout_trap_electrodes.addWidget(self.trapCompExYb.sb, 2, 6) ########################################################### #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 self.wavemeter = burleighWM(self.layoutWM, self.dWM) self.wm_coherent = coherentWM(self.layoutWM_coherent, self.dWM_coherent) ############################################################################### 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_()