From 613a4dc6de356e0ce3466740e061ba3537de4243 Mon Sep 17 00:00:00 2001 From: Balthasar Reuter Date: Wed, 9 May 2018 00:49:41 +0200 Subject: [PATCH] All timers moved to GUI --- photobooth/Photobooth.py | 40 ++++++++++++++++++++++++++++++++++---- photobooth/gui/PyQt5Gui.py | 5 +++++ photobooth/gui/__init__.py | 7 +++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/photobooth/Photobooth.py b/photobooth/Photobooth.py index f2d4f5c..d46d237 100644 --- a/photobooth/Photobooth.py +++ b/photobooth/Photobooth.py @@ -158,21 +158,45 @@ class Photobooth: tic, toc = time(), 0 - while toc < self.countdownTime: + self._send.send(gui.CountdownState()) + + while not self._recv.poll(): + toc = time() - tic self._send.send( gui.PreviewState( message = str(self.countdownTime - int(toc)), picture = ImageOps.mirror(self._cap.getPreview()) ) ) - toc = time() - tic + + event = self._recv.recv() + if str(event) == 'cancel': + self.teardown() + return 1 + elif str(event) == 'ack': + pass + else: + print('Unknown event received: ' + str(event)) + raise RuntimeError('Unknown event received', str(event)) def showCounterNoPreview(self): + self._send.send(gui.CountdownState()) + for i in range(self.countdownTime): self._send.send( gui.PreviewState( - message = str(i), + message = str(self.countdownTime - i), picture = Image.new('RGB', (1,1), 'white') ) ) sleep(1) + event = self._recv.recv() + if str(event) == 'cancel': + self.teardown() + return 1 + elif str(event) == 'ack': + pass + else: + print('Unknown event received: ' + str(event)) + raise RuntimeError('Unknown event received', str(event)) + def showPose(self): @@ -227,7 +251,15 @@ class Photobooth: self.setCameraIdle() - sleep(self.displayTime) + event = self._recv.recv() + if str(event) == 'cancel': + self.teardown() + return 1 + elif str(event) == 'ack': + pass + else: + print('Unknown event received: ' + str(event)) + raise RuntimeError('Unknown event received', str(event)) self._send.send(gui.IdleState()) self._lampOn() diff --git a/photobooth/gui/PyQt5Gui.py b/photobooth/gui/PyQt5Gui.py index c33f6dd..3948612 100644 --- a/photobooth/gui/PyQt5Gui.py +++ b/photobooth/gui/PyQt5Gui.py @@ -89,9 +89,13 @@ class PyQt5Gui(Gui): PyQt5PictureMessage('Will capture {} pictures!'.format(num_pictures))) QTimer.singleShot(cfg.getInt('Photobooth', 'greeter_time') * 1000, lambda : self._transport.send('ack')) + elif isinstance(state, CountdownState): + QTimer.singleShot(cfg.getInt('Photobooth', 'countdown_time') * 1000, lambda : self._transport.send('ack')) + elif isinstance(state, PreviewState): img = ImageQt.ImageQt(state.picture) self._p.setCentralWidget(PyQt5PictureMessage(state.message, img)) + elif isinstance(state, PoseState): self._p.setCentralWidget(PyQt5PictureMessage('Pose!')) elif isinstance(state, AssembleState): @@ -99,6 +103,7 @@ class PyQt5Gui(Gui): elif isinstance(state, PictureState): img = ImageQt.ImageQt(state.picture) self._p.setCentralWidget(PyQt5PictureMessage('', img)) + QTimer.singleShot(cfg.getInt('Photobooth', 'display_time') * 1000, lambda : self._transport.send('ack')) self._printer.print(state.picture) elif isinstance(state, ErrorState): diff --git a/photobooth/gui/__init__.py b/photobooth/gui/__init__.py index 7ed48b7..09f3d76 100644 --- a/photobooth/gui/__init__.py +++ b/photobooth/gui/__init__.py @@ -136,6 +136,13 @@ class AssembleState(GuiState): super().__init__(**kwargs) +class CountdownState(GuiState): + + def __init__(self, **kwargs): + + super().__init__(**kwargs) + + class PreviewState(MessageState, PictureState): def __init__(self, **kwargs):