Я впервые пытаюсь программировать, так что для меня все это довольно ново, но мне это очень нравится.
Я пробовал много разных вещей и сделал много проб и ошибок, но не могу обойти эту проблему. Я делаю камеру 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 секунды.