def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.ui = uic.loadUi("Beamshutter.ui", self)
        self.control = QAxContainer.QAxWidget(self)
        self.control.setControl('{3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3}')
        self.control.setProperty("HWSerialNum", 85845031)
        self.control.setGeometry(0, 0, 600, 400)
        self.mutex = QMutex(mode=QMutex.Recursive)
        self.shutterReplied = False

        self.shut = Beamshutter(self)
        self.worker = WorkerThread()

        self.ui.mainLayout.addWidget(self.control)

        self.layout().setAlignment(Qt.AlignCenter)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHeightForWidth(True)
        self.setSizePolicy(sizePolicy)
    def __init__(self,parent=None):
        QWidget.__init__(self,parent)
        self.ui=uic.loadUi("Beamshutter.ui",self)
        self.control = QAxContainer.QAxWidget(self)
        self.control.setControl('{3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3}')
        self.control.setProperty("HWSerialNum",85845031)
        self.control.setGeometry(0,0,600,400)
        self.mutex=QMutex(mode =QMutex.Recursive)
        self.shutterReplied=False


        self.shut=Beamshutter(self)
        self.worker=WorkerThread()

        self.ui.mainLayout.addWidget(self.control)

        self.layout().setAlignment(Qt.AlignCenter)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHeightForWidth(True)
        self.setSizePolicy(sizePolicy)
class BeamshutterWidget(QWidget):
    currentShutterState = pyqtSignal(str, name='currentShutterState')

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.ui = uic.loadUi("Beamshutter.ui", self)
        self.control = QAxContainer.QAxWidget(self)
        self.control.setControl('{3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3}')
        self.control.setProperty("HWSerialNum", 85845031)
        self.control.setGeometry(0, 0, 600, 400)
        self.mutex = QMutex(mode=QMutex.Recursive)
        self.shutterReplied = False

        self.shut = Beamshutter(self)
        self.worker = WorkerThread()

        self.ui.mainLayout.addWidget(self.control)

        self.layout().setAlignment(Qt.AlignCenter)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHeightForWidth(True)
        self.setSizePolicy(sizePolicy)

    def heightForWidth(self, width):
        return width * 0.75

    @pyqtSlot()
    def on_BInitializeShutter_clicked(self):
        if not self.LEDShutter.isChecked():
            self.initialize()
        else:
            self.finalize()

    def initialize(self):
        with self.check(timeOut=10):
            self.worker.executeFunction(self.shut.initialize)
        self.ui.LEDShutter.setChecked(True)

    def finalize(self):
        with self.check():
            self.worker.executeFunction(self.shut.finalize)
        self.LEDShutter.setChecked(False)

    def enable(self):
        with self.check():
            self.worker.executeFunction(self.shut.enable)

    def disable(self):
        with self.check():
            self.worker.executeFunction(self.shut.disable)

    def _del(self):
        if self.ui.LEDShutter.isChecked():
            self.finalize()

    def heightForWidth(self, w):
        return (w)

    @contextmanager
    def check(self, timeOut=2):
        out = datetime.datetime.now() + datetime.timedelta(seconds=timeOut)
        self.shutterReplied = shutterReplied = False
        yield
        while datetime.datetime.now() < out and shutterReplied == False:
            self.mutex.lock()
            shutterReplied = self.shutterReplied
            self.mutex.unlock()

        if shutterReplied == False:
            raise Exception("ThorlabsShutter timed out and might be Crashed")
class BeamshutterWidget(QWidget):
    currentShutterState=pyqtSignal(str,name='currentShutterState')
    def __init__(self,parent=None):
        QWidget.__init__(self,parent)
        self.ui=uic.loadUi("Beamshutter.ui",self)
        self.control = QAxContainer.QAxWidget(self)
        self.control.setControl('{3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3}')
        self.control.setProperty("HWSerialNum",85845031)
        self.control.setGeometry(0,0,600,400)
        self.mutex=QMutex(mode =QMutex.Recursive)
        self.shutterReplied=False


        self.shut=Beamshutter(self)
        self.worker=WorkerThread()

        self.ui.mainLayout.addWidget(self.control)

        self.layout().setAlignment(Qt.AlignCenter)
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHeightForWidth(True)
        self.setSizePolicy(sizePolicy)


    def heightForWidth(self, width):
        return width*0.75
    @pyqtSlot()
    def on_BInitializeShutter_clicked(self):
        if not self.LEDShutter.isChecked():
            self.initialize()
        else:
            self.finalize()
    def initialize(self):
        with self.check(timeOut=10):
            self.worker.executeFunction(self.shut.initialize)
        self.ui.LEDShutter.setChecked(True)


    def finalize(self):
        with self.check():
            self.worker.executeFunction(self.shut.finalize)
        self.LEDShutter.setChecked(False)


    def enable(self):
        with self.check():
            self.worker.executeFunction(self.shut.enable)

    def disable(self):
        with self.check():
            self.worker.executeFunction(self.shut.disable)

    def _del(self):
        if self.ui.LEDShutter.isChecked():
            self.finalize()

    def heightForWidth(self,w):
        return(w)

    @contextmanager
    def check(self,timeOut=2):
        out=datetime.datetime.now()+datetime.timedelta(seconds=timeOut)
        self.shutterReplied=shutterReplied=False
        yield
        while  datetime.datetime.now()<out and shutterReplied==False:
            self.mutex.lock()
            shutterReplied=self.shutterReplied
            self.mutex.unlock()

        if shutterReplied==False:
            raise Exception("ThorlabsShutter timed out and might be Crashed")