Timelapse не останавливается, переключает интервал и продолжает работу при выходе - PullRequest
0 голосов
/ 23 апреля 2019

Я впервые пытаюсь программировать, так что для меня все это довольно ново, но мне это очень нравится.

Я пробовал много разных вещей и сделал много проб и ошибок, но не могу обойти эту проблему. Я делаю камеру Timelapse с графическим интерфейсом для компании в качестве проекта стажировки. На данный момент мне удалось обновить кнопку интервала через запись с кнопкой. Однако, когда я нажимаю «Стоп», интервал переключается с заданного времени на 1 секунду и продолжает делать снимки. даже при многократном нажатии кнопки «Стоп» это не приведет к разрыву нити. После нажатия quit с root.destroy, он также продолжит работу. Что я делаю не так?

Я пытался добавить переключение нескольких строк, пробовал поиск в Google, но моих знаний по питону недостаточно, чтобы понять какое-либо решение, которое я смог найти, которое было бы близко похоже на мой проект или ситуацию.

class Capture:
    def __init__(self, waittime=30):
        self.capture_stop = False
        self.capture_waittime = waittime
        self.thread = None
        self.capture_running = False

    def capture_worker(self):
        self.capture_running = True

        try:
            with picamera.PiCamera() as camera:
                camera.resolution = (1024, 768)

                for filename in camera.capture_continuous('/home/pi/Time-lapse/project 1 -{timestamp:%H-%M-%S-%f}.jpg'):
                    i = 0
                    while i < self.capture_waittime:
                        time.sleep(0.1)
                        i += 0.1
                        if self.capture_stop:
                            break
        finally:
            self.capture_running = False
            self.capture_stop = False

    def start(self):
        if not self.capture_running:
            self.thread = threading.Thread(target=self.capture_worker)
            self.capture_stop = False
            self.thread.start()

    def stop(self):
        if self.capture_running:
            self.capture_stop = True

    def isRunning(self):
        return self.capture_running

    def setWaitTime(self, waittime):
        self.capture_waittime = waittime


capture = Capture()


def startButton():
    interval = float(var_2.get())
    capture.setWaitTime(interval)
    capture.start()


def stopButton():
    capture.stop()


def setInterval():
    global root
    var_1.set("The current interval has been set to: " + var_2.get())
    interval = float(var_2.get())
    capture.setWaitTime(interval)


def quit():
    global root
    capture.stop()
    root.destroy()

Я ожидаю, что при нажатии кнопки stop поток останавливается и не обновляет интервал до 1 секунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...