diff --git a/.gitignore b/.gitignore index de01ac0..053c6e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ photobooth.cfg photobooth/__pycache__ photobooth/*/__pycache__ +photobooth/*/*/__pycache__ .eggs .venv photobooth.egg-info diff --git a/photobooth/defaults.cfg b/photobooth/defaults.cfg index 50daf83..a733062 100644 --- a/photobooth/defaults.cfg +++ b/photobooth/defaults.cfg @@ -1,6 +1,6 @@ [Gui] -# Gui module to use (qt5) -module = qt5 +# Gui module to use (PyQt5) +module = PyQt5 # Start Photobooth in fullscreen mode (True/False) fullscreen = False # Width of Photobooth (if not fullscreen) @@ -27,8 +27,8 @@ lamp_pin = 4 [Printer] # Enable printing (True/False) enable = True -# Printer module to use (qt5) -module = qt5 +# Printer module to use (PyQt5) +module = PyQt5 # Paper width in mm width = 148 # Paper height in mm @@ -46,9 +46,9 @@ display_time = 5 [Picture] # Basedir of output pictures -basedir = +basedir = %Y-%m-%d # Basename of output pictures -basename = %Y-%m-%d/photobooth +basename = photobooth # Number of pictures in horizontal direction num_x = 2 # Number of pictures in vertical direction diff --git a/photobooth/gui/PyQt5Gui.py b/photobooth/gui/PyQt5Gui.py index b1d1515..c3dde37 100644 --- a/photobooth/gui/PyQt5Gui.py +++ b/photobooth/gui/PyQt5Gui.py @@ -4,7 +4,6 @@ import multiprocessing as mp import queue import logging -from os.path import expanduser from PIL import ImageQt @@ -12,10 +11,11 @@ from PyQt5 import QtGui, QtCore, QtWidgets import math +from .Qt5Gui import Frames + from .PyQt5GuiHelpers import QRoundProgressBar from . import * -from .. import camera, printer class PyQt5Gui(Gui): @@ -188,9 +188,11 @@ class PyQt5Gui(Gui): def showSettings(self): + global cfg self._p.handleKeypressEvent = lambda event : None self._lastState = self.showSettings - self._p.setCentralWidget(PyQt5Settings(self)) + # self._p.setCentralWidget(PyQt5Settings(self)) + self._p.setCentralWidget(Frames.Settings(cfg, self.showSettings, self.showStart, self.restart)) def showStartPhotobooth(self): @@ -341,307 +343,6 @@ class PyQt5Start(QtWidgets.QFrame): -class PyQt5Settings(QtWidgets.QFrame): - - def __init__(self, gui): - - super().__init__() - - self._gui = gui - - self.initFrame() - - - def initFrame(self): - - self._value_widgets = {} - - layout = QtWidgets.QVBoxLayout() - layout.addWidget(self.createTabs()) - layout.addStretch(1) - layout.addWidget(self.createButtons()) - self.setLayout(layout) - - - def createTabs(self): - - tabs = QtWidgets.QTabWidget() - tabs.addTab(self.createGuiSettings(), 'Interface') - tabs.addTab(self.createPhotoboothSettings(), 'Photobooth') - tabs.addTab(self.createCameraSettings(), 'Camera') - tabs.addTab(self.createPictureSettings(), 'Picture') - tabs.addTab(self.createGpioSettings(), 'GPIO') - tabs.addTab(self.createPrinterSettings(), 'Printer') - - return tabs - - - def createButtons(self): - - layout = QtWidgets.QHBoxLayout() - layout.addStretch(1) - - btnSave = QtWidgets.QPushButton('Save and restart') - btnSave.resize(btnSave.sizeHint()) - btnSave.clicked.connect(self.storeConfigAndRestart) - layout.addWidget(btnSave) - - btnCancel = QtWidgets.QPushButton('Cancel') - btnCancel.resize(btnCancel.sizeHint()) - btnCancel.clicked.connect(self._gui.showStart) - layout.addWidget(btnCancel) - - btnRestore = QtWidgets.QPushButton('Restore defaults') - btnRestore.resize(btnRestore.sizeHint()) - btnRestore.clicked.connect(self.restoreDefaults) - layout.addWidget(btnRestore) - - widget = QtWidgets.QGroupBox() - widget.setLayout(layout) - return widget - - - def createModuleComboBox(self, module_list, current_module): - - cb = QtWidgets.QComboBox() - for m in module_list: - cb.addItem(m[0]) - - idx = [x for x, m in enumerate(module_list) if m[0] == current_module] - cb.setCurrentIndex(idx[0] if len(idx) > 0 else -1) - - return cb - - - def createGuiSettings(self): - - global cfg - - self._value_widgets['Gui'] = {} - self._value_widgets['Gui']['fullscreen'] = QtWidgets.QCheckBox('Enable fullscreen') - if cfg.getBool('Gui', 'fullscreen'): - self._value_widgets['Gui']['fullscreen'].toggle() - self._value_widgets['Gui']['module'] = self.createModuleComboBox(modules, cfg.get('Gui', 'module')) - self._value_widgets['Gui']['width'] = QtWidgets.QLineEdit(cfg.get('Gui', 'width')) - self._value_widgets['Gui']['height'] = QtWidgets.QLineEdit(cfg.get('Gui', 'height')) - self._value_widgets['Gui']['hide_cursor'] = QtWidgets.QCheckBox('Hide cursor') - if cfg.getBool('Gui', 'hide_cursor'): - self._value_widgets['Gui']['hide_cursor'].toggle() - - layout = QtWidgets.QFormLayout() - layout.addRow(self._value_widgets['Gui']['fullscreen']) - layout.addRow(QtWidgets.QLabel('Gui module:'), self._value_widgets['Gui']['module']) - - sublayout_size = QtWidgets.QHBoxLayout() - sublayout_size.addWidget(QtWidgets.QLabel('Window size [px]:')) - sublayout_size.addWidget(self._value_widgets['Gui']['width']) - sublayout_size.addWidget(QtWidgets.QLabel('x')) - sublayout_size.addWidget(self._value_widgets['Gui']['height']) - layout.addRow(sublayout_size) - - layout.addRow(self._value_widgets['Gui']['hide_cursor']) - - widget = QtWidgets.QWidget() - widget.setLayout(layout) - return widget - - - def createGpioSettings(self): - - global cfg - - self._value_widgets['Gpio'] = {} - self._value_widgets['Gpio']['enable'] = QtWidgets.QCheckBox('Enable GPIO') - if cfg.getBool('Gpio', 'enable'): - self._value_widgets['Gpio']['enable'].toggle() - self._value_widgets['Gpio']['exit_pin'] = QtWidgets.QLineEdit(cfg.get('Gpio', 'exit_pin')) - self._value_widgets['Gpio']['trigger_pin'] = QtWidgets.QLineEdit(cfg.get('Gpio', 'trigger_pin')) - self._value_widgets['Gpio']['lamp_pin'] = QtWidgets.QLineEdit(cfg.get('Gpio', 'lamp_pin')) - - layout = QtWidgets.QFormLayout() - layout.addRow(self._value_widgets['Gpio']['enable']) - layout.addRow(QtWidgets.QLabel('Exit pin (BCM numbering):'), self._value_widgets['Gpio']['exit_pin']) - layout.addRow(QtWidgets.QLabel('Trigger pin (BCM numbering):'), self._value_widgets['Gpio']['trigger_pin']) - layout.addRow(QtWidgets.QLabel('Lamp pin (BCM numbering):'), self._value_widgets['Gpio']['lamp_pin']) - - widget = QtWidgets.QWidget() - widget.setLayout(layout) - return widget - - - def createPrinterSettings(self): - - global cfg - - self._value_widgets['Printer'] = {} - self._value_widgets['Printer']['enable'] = QtWidgets.QCheckBox('Enable Printing') - if cfg.getBool('Printer', 'enable'): - self._value_widgets['Printer']['enable'].toggle() - self._value_widgets['Printer']['module'] = self.createModuleComboBox(printer.modules, cfg.get('Printer', 'module')) - self._value_widgets['Printer']['width'] = QtWidgets.QLineEdit(cfg.get('Printer', 'width')) - self._value_widgets['Printer']['height'] = QtWidgets.QLineEdit(cfg.get('Printer', 'height')) - - layout = QtWidgets.QFormLayout() - layout.addRow(self._value_widgets['Printer']['enable']) - layout.addRow(QtWidgets.QLabel('Printer module:'), self._value_widgets['Printer']['module']) - - sublayout_size = QtWidgets.QHBoxLayout() - sublayout_size.addWidget(QtWidgets.QLabel('Paper size [mm]:')) - sublayout_size.addWidget(self._value_widgets['Printer']['width']) - sublayout_size.addWidget(QtWidgets.QLabel('x')) - sublayout_size.addWidget(self._value_widgets['Printer']['height']) - layout.addRow(sublayout_size) - - widget = QtWidgets.QWidget() - widget.setLayout(layout) - return widget - - - def createCameraSettings(self): - - global cfg - - self._value_widgets['Camera'] = {} - self._value_widgets['Camera']['module'] = self.createModuleComboBox(camera.modules, cfg.get('Camera', 'module')) - - layout = QtWidgets.QFormLayout() - layout.addRow(QtWidgets.QLabel('Camera module:'), self._value_widgets['Camera']['module']) - - widget = QtWidgets.QWidget() - widget.setLayout(layout) - return widget - - - def createPhotoboothSettings(self): - - global cfg - - self._value_widgets['Photobooth'] = {} - self._value_widgets['Photobooth']['show_preview'] = QtWidgets.QCheckBox('Show preview while countdown') - if cfg.getBool('Photobooth', 'show_preview'): - self._value_widgets['Photobooth']['show_preview'].toggle() - self._value_widgets['Photobooth']['greeter_time'] = QtWidgets.QLineEdit(cfg.get('Photobooth', 'greeter_time')) - self._value_widgets['Photobooth']['countdown_time'] = QtWidgets.QLineEdit(cfg.get('Photobooth', 'countdown_time')) - self._value_widgets['Photobooth']['display_time'] = QtWidgets.QLineEdit(cfg.get('Photobooth', 'display_time')) - - layout = QtWidgets.QFormLayout() - layout.addRow(self._value_widgets['Photobooth']['show_preview']) - layout.addRow(QtWidgets.QLabel('Greeter time [s]:'), self._value_widgets['Photobooth']['greeter_time']) - layout.addRow(QtWidgets.QLabel('Countdown time [s]:'), self._value_widgets['Photobooth']['countdown_time']) - layout.addRow(QtWidgets.QLabel('Display time [s]:'), self._value_widgets['Photobooth']['display_time']) - - widget = QtWidgets.QWidget() - widget.setLayout(layout) - return widget - - - def createPictureSettings(self): - - global cfg - - self._value_widgets['Picture'] = {} - self._value_widgets['Picture']['num_x'] = QtWidgets.QLineEdit(cfg.get('Picture', 'num_x')) - self._value_widgets['Picture']['num_y'] = QtWidgets.QLineEdit(cfg.get('Picture', 'num_y')) - self._value_widgets['Picture']['size_x'] = QtWidgets.QLineEdit(cfg.get('Picture', 'size_x')) - self._value_widgets['Picture']['size_y'] = QtWidgets.QLineEdit(cfg.get('Picture', 'size_y')) - self._value_widgets['Picture']['min_dist_x'] = QtWidgets.QLineEdit(cfg.get('Picture', 'min_dist_x')) - self._value_widgets['Picture']['min_dist_y'] = QtWidgets.QLineEdit(cfg.get('Picture', 'min_dist_y')) - self._value_widgets['Picture']['basedir'] = QtWidgets.QLineEdit(cfg.get('Picture', 'basedir')) - self._value_widgets['Picture']['basename'] = QtWidgets.QLineEdit(cfg.get('Picture', 'basename')) - - layout = QtWidgets.QFormLayout() - - sublayout_num = QtWidgets.QHBoxLayout() - sublayout_num.addWidget(QtWidgets.QLabel('Number of shots per picture:')) - sublayout_num.addWidget(self._value_widgets['Picture']['num_x']) - sublayout_num.addWidget(QtWidgets.QLabel('x')) - sublayout_num.addWidget(self._value_widgets['Picture']['num_y']) - layout.addRow(sublayout_num) - - sublayout_size = QtWidgets.QHBoxLayout() - sublayout_size.addWidget(QtWidgets.QLabel('Size of assembled picture:')) - sublayout_size.addWidget(self._value_widgets['Picture']['size_x']) - sublayout_size.addWidget(QtWidgets.QLabel('x')) - sublayout_size.addWidget(self._value_widgets['Picture']['size_y']) - layout.addRow(sublayout_size) - - sublayout_dist = QtWidgets.QHBoxLayout() - sublayout_dist.addWidget(QtWidgets.QLabel('Min. distance between shots in picture:')) - sublayout_dist.addWidget(self._value_widgets['Picture']['min_dist_x']) - sublayout_dist.addWidget(QtWidgets.QLabel('x')) - sublayout_dist.addWidget(self._value_widgets['Picture']['min_dist_y']) - layout.addRow(sublayout_dist) - - file_dialog = lambda : self._value_widgets['Picture']['basedir'].setText( - QtWidgets.QFileDialog.getExistingDirectory(self, 'Select directory', - expanduser('~'), QtWidgets.QFileDialog.ShowDirsOnly)) - file_button = QtWidgets.QPushButton('Select directory') - file_button.resize(file_button.sizeHint()) - file_button.clicked.connect(file_dialog) - - sublayout_path = QtWidgets.QHBoxLayout() - sublayout_path.addWidget(QtWidgets.QLabel('Basename of output files:')) - sublayout_path.addWidget(self._value_widgets['Picture']['basedir']) - sublayout_path.addWidget(QtWidgets.QLabel('/')) - sublayout_path.addWidget(self._value_widgets['Picture']['basename']) - sublayout_path.addWidget(file_button) - layout.addRow(sublayout_path) - - widget = QtWidgets.QWidget() - widget.setLayout(layout) - return widget - - - def storeConfigAndRestart(self): - - global cfg - - cfg.set('Gui', 'fullscreen', str(self._value_widgets['Gui']['fullscreen'].isChecked())) - cfg.set('Gui', 'module', modules[self._value_widgets['Gui']['module'].currentIndex()][0]) - cfg.set('Gui', 'width', self._value_widgets['Gui']['width'].text()) - cfg.set('Gui', 'height', self._value_widgets['Gui']['height'].text()) - cfg.set('Gui', 'hide_cursor', str(self._value_widgets['Gui']['hide_cursor'].isChecked())) - - cfg.set('Gpio', 'enable', str(self._value_widgets['Gpio']['enable'].isChecked())) - cfg.set('Gpio', 'exit_pin', self._value_widgets['Gpio']['exit_pin'].text()) - cfg.set('Gpio', 'trigger_pin', self._value_widgets['Gpio']['trigger_pin'].text()) - cfg.set('Gpio', 'lamp_pin', self._value_widgets['Gpio']['lamp_pin'].text()) - - cfg.set('Printer', 'enable', str(self._value_widgets['Printer']['enable'].isChecked())) - cfg.set('Printer', 'module', modules[self._value_widgets['Printer']['module'].currentIndex()][0]) - cfg.set('Printer', 'width', self._value_widgets['Printer']['width'].text()) - cfg.set('Printer', 'height', self._value_widgets['Printer']['height'].text()) - - cfg.set('Photobooth', 'show_preview', str(self._value_widgets['Photobooth']['show_preview'].isChecked())) - cfg.set('Photobooth', 'greeter_time', str(self._value_widgets['Photobooth']['greeter_time'].text())) - cfg.set('Photobooth', 'countdown_time', str(self._value_widgets['Photobooth']['countdown_time'].text())) - cfg.set('Photobooth', 'display_time', str(self._value_widgets['Photobooth']['display_time'].text())) - - cfg.set('Picture', 'num_x', self._value_widgets['Picture']['num_x'].text()) - cfg.set('Picture', 'num_y', self._value_widgets['Picture']['num_y'].text()) - cfg.set('Picture', 'size_x', self._value_widgets['Picture']['size_x'].text()) - cfg.set('Picture', 'size_y', self._value_widgets['Picture']['size_y'].text()) - cfg.set('Picture', 'min_dist_x', self._value_widgets['Picture']['min_dist_x'].text()) - cfg.set('Picture', 'min_dist_y', self._value_widgets['Picture']['min_dist_y'].text()) - cfg.set('Picture', 'basedir', self._value_widgets['Picture']['basedir'].text()) - cfg.set('Picture', 'basename', self._value_widgets['Picture']['basename'].text()) - - cfg.set('Camera', 'module', camera.modules[self._value_widgets['Camera']['module'].currentIndex()][0]) - - cfg.write() - self._gui.restart() - - - def restoreDefaults(self): - - global cfg - - cfg.defaults() - self._gui.showSettings() - - - - class PyQt5WaitMessage(QtWidgets.QFrame): # With spinning wait clock, inspired by # https://wiki.python.org/moin/PyQt/A%20full%20widget%20waiting%20indicator diff --git a/photobooth/gui/Qt5Gui/Frames.py b/photobooth/gui/Qt5Gui/Frames.py new file mode 100644 index 0000000..7908d2e --- /dev/null +++ b/photobooth/gui/Qt5Gui/Frames.py @@ -0,0 +1,354 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from os.path import expanduser + +from PyQt5 import QtWidgets + +from .. import modules +from ... import camera +from ... import printer + + +class Settings(QtWidgets.QFrame): + + def __init__(self, config, reload_action, cancel_action, restart_action): + + super().__init__() + + self._cfg = config + self._reloadAction = reload_action + self._cancelAction = cancel_action + self._restartAction = restart_action + + self.initFrame() + + def init(self, category): + + self._widgets[category] = {} + + def add(self, category, key, value): + + self._widgets[category][key] = value + + def get(self, category, key): + + return self._widgets[category][key] + + def initFrame(self): + + self._widgets = {} + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.createTabs()) + layout.addStretch(1) + layout.addWidget(self.createButtons()) + self.setLayout(layout) + + def createTabs(self): + + tabs = QtWidgets.QTabWidget() + tabs.addTab(self.createGuiSettings(), 'Interface') + tabs.addTab(self.createPhotoboothSettings(), 'Photobooth') + tabs.addTab(self.createCameraSettings(), 'Camera') + tabs.addTab(self.createPictureSettings(), 'Picture') + tabs.addTab(self.createGpioSettings(), 'GPIO') + tabs.addTab(self.createPrinterSettings(), 'Printer') + return tabs + + def createButtons(self): + + layout = QtWidgets.QHBoxLayout() + layout.addStretch(1) + + btnSave = QtWidgets.QPushButton('Save and restart') + btnSave.clicked.connect(self.storeConfigAndRestart) + layout.addWidget(btnSave) + + btnCancel = QtWidgets.QPushButton('Cancel') + btnCancel.clicked.connect(self._cancelAction) + layout.addWidget(btnCancel) + + btnRestore = QtWidgets.QPushButton('Restore defaults') + btnRestore.clicked.connect(self.restoreDefaults) + layout.addWidget(btnRestore) + + widget = QtWidgets.QGroupBox() + widget.setLayout(layout) + return widget + + def createModuleComboBox(self, module_list, current_module): + + cb = QtWidgets.QComboBox() + for m in module_list: + cb.addItem(m[0]) + + idx = [x for x, m in enumerate(module_list) if m[0] == current_module] + cb.setCurrentIndex(idx[0] if len(idx) > 0 else -1) + + return cb + + def createGuiSettings(self): + + self.init('Gui') + + fullscreen = QtWidgets.QCheckBox() + fullscreen.setChecked(self._cfg.getBool('Gui', 'fullscreen')) + self.add('Gui', 'fullscreen', fullscreen) + + module = self.createModuleComboBox(modules, + self._cfg.get('Gui', 'module')) + self.add('Gui', 'module', module) + + width = QtWidgets.QLineEdit(self._cfg.get('Gui', 'width')) + height = QtWidgets.QLineEdit(self._cfg.get('Gui', 'height')) + self.add('Gui', 'width', width) + self.add('Gui', 'height', height) + + cursor = QtWidgets.QCheckBox() + cursor.setChecked(self._cfg.getBool('Gui', 'hide_cursor')) + self.add('Gui', 'hide_cursor', cursor) + + lay_size = QtWidgets.QHBoxLayout() + lay_size.addWidget(width) + lay_size.addWidget(QtWidgets.QLabel('x')) + lay_size.addWidget(height) + + layout = QtWidgets.QFormLayout() + layout.addRow('Enable fullscreen:', fullscreen) + layout.addRow('Gui module:', module) + layout.addRow('Window size [px]:', lay_size) + layout.addRow('Hide cursor:', cursor) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + return widget + + def createPhotoboothSettings(self): + + self.init('Photobooth') + + preview = QtWidgets.QCheckBox() + preview.setChecked(self._cfg.getBool('Photobooth', 'show_preview')) + self.add('Photobooth', 'show_preview', preview) + + greet_time = QtWidgets.QLineEdit(self._cfg.get('Photobooth', + 'greeter_time')) + count_time = QtWidgets.QLineEdit(self._cfg.get('Photobooth', + 'countdown_time')) + displ_time = QtWidgets.QLineEdit(self._cfg.get('Photobooth', + 'display_time')) + self.add('Photobooth', 'greeter_time', greet_time) + self.add('Photobooth', 'countdown_time', count_time) + self.add('Photobooth', 'display_time', displ_time) + + layout = QtWidgets.QFormLayout() + layout.addRow('Show preview during countdown:', preview) + layout.addRow('Greeter time before countdown [s]:', greet_time) + layout.addRow('Countdown time [s]:', count_time) + layout.addRow('Picture display time [s]:', displ_time) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + return widget + + def createCameraSettings(self): + + self.init('Camera') + + module = self.createModuleComboBox(camera.modules, + self._cfg.get('Camera', 'module')) + self.add('Camera', 'module', module) + + layout = QtWidgets.QFormLayout() + layout.addRow('Camera module:', module) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + return widget + + def createPictureSettings(self): + + self.init('Picture') + + num_x = QtWidgets.QLineEdit(self._cfg.get('Picture', 'num_x')) + num_y = QtWidgets.QLineEdit(self._cfg.get('Picture', 'num_y')) + self.add('Picture', 'num_x', num_x) + self.add('Picture', 'num_y', num_y) + + size_x = QtWidgets.QLineEdit(self._cfg.get('Picture', 'size_x')) + size_y = QtWidgets.QLineEdit(self._cfg.get('Picture', 'size_y')) + self.add('Picture', 'size_x', size_x) + self.add('Picture', 'size_y', size_y) + + min_dist_x = QtWidgets.QLineEdit(self._cfg.get('Picture', + 'min_dist_x')) + min_dist_y = QtWidgets.QLineEdit(self._cfg.get('Picture', + 'min_dist_y')) + self.add('Picture', 'min_dist_x', min_dist_x) + self.add('Picture', 'min_dist_y', min_dist_y) + + basedir = QtWidgets.QLineEdit(self._cfg.get('Picture', 'basedir')) + basename = QtWidgets.QLineEdit(self._cfg.get('Picture', 'basename')) + self.add('Picture', 'basedir', basedir) + self.add('Picture', 'basename', basename) + + lay_num = QtWidgets.QHBoxLayout() + lay_num.addWidget(num_x) + lay_num.addWidget(QtWidgets.QLabel('x')) + lay_num.addWidget(num_y) + + lay_size = QtWidgets.QHBoxLayout() + lay_size.addWidget(size_x) + lay_size.addWidget(QtWidgets.QLabel('x')) + lay_size.addWidget(size_y) + + lay_dist = QtWidgets.QHBoxLayout() + lay_dist.addWidget(min_dist_x) + lay_dist.addWidget(QtWidgets.QLabel('x')) + lay_dist.addWidget(min_dist_y) + + def file_dialog(): + basedir.setText(QtWidgets.QFileDialog.getExistingDirectory(self, + 'Select directory', expanduser('~'), + QtWidgets.QFileDialog.ShowDirsOnly)) + + file_button = QtWidgets.QPushButton('Select directory') + file_button.clicked.connect(file_dialog) + + lay_file = QtWidgets.QHBoxLayout() + lay_file.addWidget(basedir) + lay_file.addWidget(file_button) + + layout = QtWidgets.QFormLayout() + layout.addRow('Number of shots per picture:', lay_num) + layout.addRow('Size of assembled picture [px]:', lay_size) + layout.addRow('Minimum distance between shots in picture [px]:', + lay_dist) + layout.addRow('Output directory (strftime directives possible):', + lay_file) + layout.addRow('Basename of files (strftime directives possible):', + basename) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + return widget + + def createGpioSettings(self): + + self.init('Gpio') + + enable = QtWidgets.QCheckBox() + enable.setChecked(self._cfg.getBool('Gpio', 'enable')) + self.add('Gpio', 'enable', enable) + + exit_pin = QtWidgets.QLineEdit(self._cfg.get('Gpio', 'exit_pin')) + trig_pin = QtWidgets.QLineEdit(self._cfg.get('Gpio', 'trigger_pin')) + lamp_pin = QtWidgets.QLineEdit(self._cfg.get('Gpio', 'lamp_pin')) + self.add('Gpio', 'exit_pin', exit_pin) + self.add('Gpio', 'trigger_pin', trig_pin) + self.add('Gpio', 'lamp_pin', lamp_pin) + + layout = QtWidgets.QFormLayout() + layout.addRow('Enable GPIO:', enable) + layout.addRow('Exit button pin (BCM numbering):', exit_pin) + layout.addRow('Trigger button pin (BCM numbering):', trig_pin) + layout.addRow('Idle lamp pin (BCM numbering):', lamp_pin) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + return widget + + def createPrinterSettings(self): + + self.init('Printer') + + enable = QtWidgets.QCheckBox() + enable.setChecked(self._cfg.getBool('Printer', 'enable')) + self.add('Printer', 'enable', enable) + + module = self.createModuleComboBox(printer.modules, + self._cfg.get('Printer', 'module')) + self.add('Printer', 'module', module) + + width = QtWidgets.QLineEdit(self._cfg.get('Printer', 'width')) + height = QtWidgets.QLineEdit(self._cfg.get('Printer', 'height')) + self.add('Printer', 'width', width) + self.add('Printer', 'height', height) + + lay_size = QtWidgets.QHBoxLayout() + lay_size.addWidget(width) + lay_size.addWidget(QtWidgets.QLabel('x')) + lay_size.addWidget(height) + + layout = QtWidgets.QFormLayout() + layout.addRow('Enable printing:', enable) + layout.addRow('Module:', module) + layout.addRow('Paper size [mm]:', lay_size) + + widget = QtWidgets.QWidget() + widget.setLayout(layout) + return widget + + def storeConfigAndRestart(self): + + self._cfg.set('Gui', 'fullscreen', + str(self.get('Gui', 'fullscreen').isChecked())) + self._cfg.set('Gui', 'module', + modules[self.get('Gui', 'module').currentIndex()][0]) + self._cfg.set('Gui', 'width', self.get('Gui', 'width').text()) + self._cfg.set('Gui', 'height', self.get('Gui', 'height').text()) + self._cfg.set('Gui', 'hide_cursor', + str(self.get('Gui', 'hide_cursor').isChecked())) + + self._cfg.set('Photobooth', 'show_preview', + str(self.get('Photobooth', 'show_preview').isChecked())) + self._cfg.set('Photobooth', 'greeter_time', + str(self.get('Photobooth', 'greeter_time').text())) + self._cfg.set('Photobooth', 'countdown_time', + str(self.get('Photobooth', 'countdown_time').text())) + self._cfg.set('Photobooth', 'display_time', + str(self.get('Photobooth', 'display_time').text())) + + self._cfg.set('Camera', 'module', + camera.modules[self.get('Camera', + 'module').currentIndex()][0]) + + self._cfg.set('Picture', 'num_x', self.get('Picture', 'num_x').text()) + self._cfg.set('Picture', 'num_y', self.get('Picture', 'num_y').text()) + self._cfg.set('Picture', 'size_x', + self.get('Picture', 'size_x').text()) + self._cfg.set('Picture', 'size_y', + self.get('Picture', 'size_y').text()) + self._cfg.set('Picture', 'min_dist_x', + self.get('Picture', 'min_dist_x').text()) + self._cfg.set('Picture', 'min_dist_y', + self.get('Picture', 'min_dist_y').text()) + self._cfg.set('Picture', 'basedir', + self.get('Picture', 'basedir').text()) + self._cfg.set('Picture', 'basename', + self.get('Picture', 'basename').text()) + + self._cfg.set('Gpio', 'enable', + str(self.get('Gpio', 'enable').isChecked())) + self._cfg.set('Gpio', 'exit_pin', self.get('Gpio', 'exit_pin').text()) + self._cfg.set('Gpio', 'trigger_pin', + self.get('Gpio', 'trigger_pin').text()) + self._cfg.set('Gpio', 'lamp_pin', self.get('Gpio', 'lamp_pin').text()) + + self._cfg.set('Printer', 'enable', + str(self.get('Printer', 'enable').isChecked())) + self._cfg.set('Printer', 'module', + printer.modules[self.get('Printer', + 'module').currentIndex()][0]) + self._cfg.set('Printer', 'width', self.get('Printer', 'width').text()) + self._cfg.set('Printer', 'height', + self.get('Printer', 'height').text()) + + self._cfg.write() + self._restartAction() + + def restoreDefaults(self): + + self._cfg.defaults() + self._reloadAction() diff --git a/photobooth/gui/__init__.py b/photobooth/gui/__init__.py index 374cd3a..9af3d86 100644 --- a/photobooth/gui/__init__.py +++ b/photobooth/gui/__init__.py @@ -5,7 +5,7 @@ from .GuiState import * # noqa from .GuiPostprocess import * # noqa # Available gui modules as tuples of (config name, module name, class name) -modules = (('qt5', 'PyQt5Gui', 'PyQt5Gui'), ) +modules = (('PyQt5', 'PyQt5Gui', 'PyQt5Gui'), ) class Gui: diff --git a/photobooth/printer/__init__.py b/photobooth/printer/__init__.py index 7341a9a..74bca6b 100644 --- a/photobooth/printer/__init__.py +++ b/photobooth/printer/__init__.py @@ -4,7 +4,7 @@ # Available printer modules as tuples of (config name, module name, class name) modules = ( - ('qt5', 'PrinterPyQt5', 'PrinterPyQt5'), ) + ('PyQt5', 'PrinterPyQt5', 'PrinterPyQt5'), ) class Printer: