Пример #1
0
    def On_RunFor(self, event, idx):
        global device
        cHrs = self.widgets[idx].timerText.GetLabel()[:3]
        cMin = self.widgets[idx].timerText.GetLabel()[4:6]
        cSec = self.widgets[idx].timerText.GetLabel()[7:9]
        runForBox = GUI3.RunForDialog(self, cHrs, cMin, cSec)
        runForBox.ShowModal()
        if runForBox.cancelled:
            return
        else:

            runForSeconds = runForBox.hours.GetValue(
            ) * 2400 + runForBox.minutes.GetValue(
            ) * 60 + runForBox.seconds.GetValue()
            timer = []
            timer.append(runForBox.seconds.GetValue())
            timer.append(runForBox.minutes.GetValue())
            timer.append(runForBox.hours.GetValue())
            timeFormat = "{0:03}:{1:02}:{2:02}".format(
                runForBox.hours.GetValue(), runForBox.minutes.GetValue(),
                runForBox.seconds.GetValue())
            self.widgets[idx].timerText.SetLabel(timeFormat)
            self.widgets[idx].timerText.Enable(True)

            self.widgets[idx].progressBar.SetRange(PROGRESS_PRECISION)
            self.widgets[idx].progressBar.SetValue(0)

            def decTimer():

                timer[0] -= 1
                if timer[0] < 0:
                    timer[1] -= 1
                    timer[0] = 59
                if timer[1] < 0:
                    timer[2] -= 1
                    timer[1] = 59
                    timer[0] = 59
                if timer[2] < 0:
                    timer[2] = 0
                    timer[1] = 0
                    timer[0] = 0

                timeFormat = "{0:03}:{1:02}:{2:02}".format(
                    timer[2], timer[1], timer[0])
                self.widgets[idx].timerText.SetLabel(timeFormat)

            def incGauge():
                newVal = self.widgets[idx].progressBar.GetValue() + 1
                self.widgets[idx].progressBar.SetValue(newVal)

            self.widgets[idx].progressTimers = []
            self.widgets[idx].progressTimers.append(
                RepeatTimer.Timer(1, True, decTimer))
            for n in range(logger.options["progress_precision"] - 1):
                self.widgets[idx].progressTimers.append(
                    threading.Timer(
                        (n + 1) * (float(runForSeconds) /
                                   logger.options["progress_precision"]),
                        incGauge))

            def onStop():
                # TODO is GUI still alive???
                self.widgets[idx].timerText.Enable(False)
                for t in self.widgets[idx].progressTimers:
                    t.cancel()
                self.progressTimers = []
                self.widgets[idx].runForTimer = None
                self.widgets[idx].progressBar.SetRange(100)
                self.widgets[idx].progressBar.SetValue(100)
                device.channels[idx].stop()

            self.widgets[idx].runForTimer = threading.Timer(
                runForSeconds, onStop)