Settings moved to new file
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
photobooth.cfg
|
||||
photobooth/__pycache__
|
||||
photobooth/*/__pycache__
|
||||
photobooth/*/*/__pycache__
|
||||
.eggs
|
||||
.venv
|
||||
photobooth.egg-info
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
354
photobooth/gui/Qt5Gui/Frames.py
Normal file
354
photobooth/gui/Qt5Gui/Frames.py
Normal file
@@ -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()
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user