Changed settings dialog to contain tabs
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import os.path
|
||||||
|
|
||||||
from time import localtime, strftime
|
from time import localtime, strftime
|
||||||
|
|
||||||
@@ -27,7 +28,9 @@ class PictureSaver(WorkerTask):
|
|||||||
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
basename = strftime(config.get('Picture', 'basename'), localtime())
|
path = os.path.join(config.get('Picture', 'basedir'),
|
||||||
|
config.get('Picture', 'basename'))
|
||||||
|
basename = strftime(path, localtime())
|
||||||
self._pic_list = PictureList(basename)
|
self._pic_list = PictureList(basename)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,11 +40,13 @@ show_preview = True
|
|||||||
# Greeter time in seconds (shown before countdown)
|
# Greeter time in seconds (shown before countdown)
|
||||||
greeter_time = 3
|
greeter_time = 3
|
||||||
# Countdown length in seconds (shown before every shot)
|
# Countdown length in seconds (shown before every shot)
|
||||||
countdown_time = 5
|
countdown_time = 8
|
||||||
# Display time of assembled picture (shown after last shot)
|
# Display time of assembled picture (shown after last shot)
|
||||||
display_time = 10
|
display_time = 5
|
||||||
|
|
||||||
[Picture]
|
[Picture]
|
||||||
|
# Basedir of output pictures
|
||||||
|
basedir =
|
||||||
# Basename of output pictures
|
# Basename of output pictures
|
||||||
basename = %Y-%m-%d/photobooth
|
basename = %Y-%m-%d/photobooth
|
||||||
# Number of pictures in horizontal direction
|
# Number of pictures in horizontal direction
|
||||||
|
|||||||
@@ -4,11 +4,12 @@
|
|||||||
import multiprocessing as mp
|
import multiprocessing as mp
|
||||||
import queue
|
import queue
|
||||||
import logging
|
import logging
|
||||||
|
from os.path import expanduser
|
||||||
|
|
||||||
from PIL import ImageQt
|
from PIL import ImageQt
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QObject, QPoint, QThread, QTimer, pyqtSignal
|
from PyQt5.QtCore import Qt, QObject, QPoint, QThread, QTimer, pyqtSignal
|
||||||
from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QFormLayout, QFrame, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLayout, QLineEdit, QMainWindow, QMessageBox, QPushButton, QVBoxLayout, QWidget)
|
from PyQt5.QtWidgets import (QFileDialog, QTabWidget, QApplication, QCheckBox, QComboBox, QFormLayout, QFrame, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLayout, QLineEdit, QMainWindow, QMessageBox, QPushButton, QVBoxLayout, QWidget)
|
||||||
from PyQt5.QtGui import QImage, QPainter, QPixmap
|
from PyQt5.QtGui import QImage, QPainter, QPixmap
|
||||||
|
|
||||||
import math
|
import math
|
||||||
@@ -361,21 +362,51 @@ class PyQt5Settings(QFrame):
|
|||||||
|
|
||||||
self._value_widgets = {}
|
self._value_widgets = {}
|
||||||
|
|
||||||
grid = QGridLayout()
|
|
||||||
grid.addWidget(self.createGuiSettings(), 0, 0)
|
|
||||||
grid.addWidget(self.createGpioSettings(), 1, 0)
|
|
||||||
grid.addWidget(self.createPrinterSettings(), 2, 0)
|
|
||||||
grid.addWidget(self.createCameraSettings(), 0, 1)
|
|
||||||
grid.addWidget(self.createPhotoboothSettings(), 1, 1)
|
|
||||||
grid.addWidget(self.createPictureSettings(), 2, 1)
|
|
||||||
|
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
layout.addLayout(grid)
|
layout.addWidget(self.createTabs())
|
||||||
layout.addStretch(1)
|
layout.addStretch(1)
|
||||||
layout.addWidget(self.createButtons())
|
layout.addWidget(self.createButtons())
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
|
||||||
|
def createTabs(self):
|
||||||
|
|
||||||
|
tabs = 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 = QHBoxLayout()
|
||||||
|
layout.addStretch(1)
|
||||||
|
|
||||||
|
btnSave = QPushButton('Save and restart')
|
||||||
|
btnSave.resize(btnSave.sizeHint())
|
||||||
|
btnSave.clicked.connect(self.storeConfigAndRestart)
|
||||||
|
layout.addWidget(btnSave)
|
||||||
|
|
||||||
|
btnCancel = QPushButton('Cancel')
|
||||||
|
btnCancel.resize(btnCancel.sizeHint())
|
||||||
|
btnCancel.clicked.connect(self._gui.showStart)
|
||||||
|
layout.addWidget(btnCancel)
|
||||||
|
|
||||||
|
btnRestore = QPushButton('Restore defaults')
|
||||||
|
btnRestore.resize(btnRestore.sizeHint())
|
||||||
|
btnRestore.clicked.connect(self.restoreDefaults)
|
||||||
|
layout.addWidget(btnRestore)
|
||||||
|
|
||||||
|
widget = QGroupBox()
|
||||||
|
widget.setLayout(layout)
|
||||||
|
return widget
|
||||||
|
|
||||||
|
|
||||||
def createModuleComboBox(self, module_list, current_module):
|
def createModuleComboBox(self, module_list, current_module):
|
||||||
|
|
||||||
cb = QComboBox()
|
cb = QComboBox()
|
||||||
@@ -416,7 +447,7 @@ class PyQt5Settings(QFrame):
|
|||||||
|
|
||||||
layout.addRow(self._value_widgets['Gui']['hide_cursor'])
|
layout.addRow(self._value_widgets['Gui']['hide_cursor'])
|
||||||
|
|
||||||
widget = QGroupBox('Interface settings')
|
widget = QWidget()
|
||||||
widget.setLayout(layout)
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
@@ -439,7 +470,8 @@ class PyQt5Settings(QFrame):
|
|||||||
layout.addRow(QLabel('Trigger pin (BCM numbering):'), self._value_widgets['Gpio']['trigger_pin'])
|
layout.addRow(QLabel('Trigger pin (BCM numbering):'), self._value_widgets['Gpio']['trigger_pin'])
|
||||||
layout.addRow(QLabel('Lamp pin (BCM numbering):'), self._value_widgets['Gpio']['lamp_pin'])
|
layout.addRow(QLabel('Lamp pin (BCM numbering):'), self._value_widgets['Gpio']['lamp_pin'])
|
||||||
|
|
||||||
widget = QGroupBox('GPIO settings')
|
# widget = QGroupBox('GPIO settings')
|
||||||
|
widget = QWidget()
|
||||||
widget.setLayout(layout)
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
@@ -467,7 +499,8 @@ class PyQt5Settings(QFrame):
|
|||||||
sublayout_size.addWidget(self._value_widgets['Printer']['height'])
|
sublayout_size.addWidget(self._value_widgets['Printer']['height'])
|
||||||
layout.addRow(sublayout_size)
|
layout.addRow(sublayout_size)
|
||||||
|
|
||||||
widget = QGroupBox('Printer settings')
|
# widget = QGroupBox('Printer settings')
|
||||||
|
widget = QWidget()
|
||||||
widget.setLayout(layout)
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
@@ -482,7 +515,8 @@ class PyQt5Settings(QFrame):
|
|||||||
layout = QFormLayout()
|
layout = QFormLayout()
|
||||||
layout.addRow(QLabel('Camera module:'), self._value_widgets['Camera']['module'])
|
layout.addRow(QLabel('Camera module:'), self._value_widgets['Camera']['module'])
|
||||||
|
|
||||||
widget = QGroupBox('Camera settings')
|
# widget = QGroupBox('Camera settings')
|
||||||
|
widget = QWidget()
|
||||||
widget.setLayout(layout)
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
@@ -505,7 +539,8 @@ class PyQt5Settings(QFrame):
|
|||||||
layout.addRow(QLabel('Countdown time [s]:'), self._value_widgets['Photobooth']['countdown_time'])
|
layout.addRow(QLabel('Countdown time [s]:'), self._value_widgets['Photobooth']['countdown_time'])
|
||||||
layout.addRow(QLabel('Display time [s]:'), self._value_widgets['Photobooth']['display_time'])
|
layout.addRow(QLabel('Display time [s]:'), self._value_widgets['Photobooth']['display_time'])
|
||||||
|
|
||||||
widget = QGroupBox('Photobooth settings')
|
# widget = QGroupBox('Photobooth settings')
|
||||||
|
widget = QWidget()
|
||||||
widget.setLayout(layout)
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
@@ -521,6 +556,7 @@ class PyQt5Settings(QFrame):
|
|||||||
self._value_widgets['Picture']['size_y'] = QLineEdit(cfg.get('Picture', 'size_y'))
|
self._value_widgets['Picture']['size_y'] = QLineEdit(cfg.get('Picture', 'size_y'))
|
||||||
self._value_widgets['Picture']['min_dist_x'] = QLineEdit(cfg.get('Picture', 'min_dist_x'))
|
self._value_widgets['Picture']['min_dist_x'] = QLineEdit(cfg.get('Picture', 'min_dist_x'))
|
||||||
self._value_widgets['Picture']['min_dist_y'] = QLineEdit(cfg.get('Picture', 'min_dist_y'))
|
self._value_widgets['Picture']['min_dist_y'] = QLineEdit(cfg.get('Picture', 'min_dist_y'))
|
||||||
|
self._value_widgets['Picture']['basedir'] = QLineEdit(cfg.get('Picture', 'basedir'))
|
||||||
self._value_widgets['Picture']['basename'] = QLineEdit(cfg.get('Picture', 'basename'))
|
self._value_widgets['Picture']['basename'] = QLineEdit(cfg.get('Picture', 'basename'))
|
||||||
|
|
||||||
layout = QFormLayout()
|
layout = QFormLayout()
|
||||||
@@ -546,34 +582,22 @@ class PyQt5Settings(QFrame):
|
|||||||
sublayout_dist.addWidget(self._value_widgets['Picture']['min_dist_y'])
|
sublayout_dist.addWidget(self._value_widgets['Picture']['min_dist_y'])
|
||||||
layout.addRow(sublayout_dist)
|
layout.addRow(sublayout_dist)
|
||||||
|
|
||||||
layout.addRow(QLabel('Basename of output files:'), self._value_widgets['Picture']['basename'])
|
file_dialog = lambda : self._value_widgets['Picture']['basedir'].setText(
|
||||||
|
QFileDialog.getExistingDirectory(self, 'Select directory',
|
||||||
|
expanduser('~'), QFileDialog.ShowDirsOnly))
|
||||||
|
file_button = QPushButton('Select directory')
|
||||||
|
file_button.resize(file_button.sizeHint())
|
||||||
|
file_button.clicked.connect(file_dialog)
|
||||||
|
|
||||||
widget = QGroupBox('Picture settings')
|
sublayout_path = QHBoxLayout()
|
||||||
widget.setLayout(layout)
|
sublayout_path.addWidget(QLabel('Basename of output files:'))
|
||||||
return widget
|
sublayout_path.addWidget(self._value_widgets['Picture']['basedir'])
|
||||||
|
sublayout_path.addWidget(QLabel('/'))
|
||||||
|
sublayout_path.addWidget(self._value_widgets['Picture']['basename'])
|
||||||
|
sublayout_path.addWidget(file_button)
|
||||||
|
layout.addRow(sublayout_path)
|
||||||
|
|
||||||
|
widget = QWidget()
|
||||||
def createButtons(self):
|
|
||||||
|
|
||||||
layout = QHBoxLayout()
|
|
||||||
layout.addStretch(1)
|
|
||||||
|
|
||||||
btnSave = QPushButton('Save')
|
|
||||||
btnSave.resize(btnSave.sizeHint())
|
|
||||||
btnSave.clicked.connect(self.storeConfigAndRestart)
|
|
||||||
layout.addWidget(btnSave)
|
|
||||||
|
|
||||||
btnCancel = QPushButton('Cancel')
|
|
||||||
btnCancel.resize(btnCancel.sizeHint())
|
|
||||||
btnCancel.clicked.connect(self._gui.showStart)
|
|
||||||
layout.addWidget(btnCancel)
|
|
||||||
|
|
||||||
btnRestore = QPushButton('Restore defaults')
|
|
||||||
btnRestore.resize(btnRestore.sizeHint())
|
|
||||||
btnRestore.clicked.connect(self.restoreDefaults)
|
|
||||||
layout.addWidget(btnRestore)
|
|
||||||
|
|
||||||
widget = QGroupBox()
|
|
||||||
widget.setLayout(layout)
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
@@ -588,7 +612,6 @@ class PyQt5Settings(QFrame):
|
|||||||
cfg.set('Gui', 'height', self._value_widgets['Gui']['height'].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('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', 'enable', str(self._value_widgets['Gpio']['enable'].isChecked()))
|
||||||
cfg.set('Gpio', 'exit_pin', self._value_widgets['Gpio']['exit_pin'].text())
|
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', 'trigger_pin', self._value_widgets['Gpio']['trigger_pin'].text())
|
||||||
@@ -610,6 +633,7 @@ class PyQt5Settings(QFrame):
|
|||||||
cfg.set('Picture', 'size_y', self._value_widgets['Picture']['size_y'].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_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', '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('Picture', 'basename', self._value_widgets['Picture']['basename'].text())
|
||||||
|
|
||||||
cfg.set('Camera', 'module', camera.modules[self._value_widgets['Camera']['module'].currentIndex()][0])
|
cfg.set('Camera', 'module', camera.modules[self._value_widgets['Camera']['module'].currentIndex()][0])
|
||||||
|
|||||||
Reference in New Issue
Block a user