Added menu to set date/time
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from os.path import expanduser
|
import logging
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
from PyQt5 import QtCore
|
from PyQt5 import QtCore
|
||||||
from PyQt5 import QtGui
|
from PyQt5 import QtGui
|
||||||
@@ -16,27 +19,44 @@ from . import Widgets
|
|||||||
|
|
||||||
class Start(QtWidgets.QFrame):
|
class Start(QtWidgets.QFrame):
|
||||||
|
|
||||||
def __init__(self, start_action, settings_action, exit_action):
|
def __init__(self, start_action, set_date_action, settings_action,
|
||||||
|
exit_action):
|
||||||
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.initFrame(start_action, settings_action, exit_action)
|
self.initFrame(start_action, set_date_action, settings_action,
|
||||||
|
exit_action)
|
||||||
|
|
||||||
def initFrame(self, start_action, settings_action, exit_action):
|
def initFrame(self, start_action, set_date_action, settings_action,
|
||||||
|
exit_action):
|
||||||
|
|
||||||
btnStart = QtWidgets.QPushButton('Start Photobooth')
|
btnStart = QtWidgets.QPushButton('Start photobooth')
|
||||||
btnStart.clicked.connect(start_action)
|
btnStart.clicked.connect(start_action)
|
||||||
|
|
||||||
|
btnSetDate = QtWidgets.QPushButton('Set date/time')
|
||||||
|
btnSetDate.clicked.connect(set_date_action)
|
||||||
|
|
||||||
btnSettings = QtWidgets.QPushButton('Settings')
|
btnSettings = QtWidgets.QPushButton('Settings')
|
||||||
btnSettings.clicked.connect(settings_action)
|
btnSettings.clicked.connect(settings_action)
|
||||||
|
|
||||||
btnQuit = QtWidgets.QPushButton('Quit')
|
btnQuit = QtWidgets.QPushButton('Quit')
|
||||||
btnQuit.clicked.connect(exit_action)
|
btnQuit.clicked.connect(exit_action)
|
||||||
|
|
||||||
lay = QtWidgets.QHBoxLayout()
|
btnLay = QtWidgets.QHBoxLayout()
|
||||||
lay.addWidget(btnStart)
|
btnLay.addWidget(btnStart)
|
||||||
lay.addWidget(btnSettings)
|
btnLay.addWidget(btnSetDate)
|
||||||
lay.addWidget(btnQuit)
|
btnLay.addWidget(btnSettings)
|
||||||
|
btnLay.addWidget(btnQuit)
|
||||||
|
|
||||||
|
title = QtWidgets.QLabel('photobooth')
|
||||||
|
|
||||||
|
url = 'https://github.com/reuterbal/photobooth'
|
||||||
|
link = QtWidgets.QLabel('<a href="{0}">{0}</a>'.format(url))
|
||||||
|
|
||||||
|
lay = QtWidgets.QVBoxLayout()
|
||||||
|
lay.addWidget(title)
|
||||||
|
lay.addLayout(btnLay)
|
||||||
|
lay.addWidget(link)
|
||||||
self.setLayout(lay)
|
self.setLayout(lay)
|
||||||
|
|
||||||
|
|
||||||
@@ -287,6 +307,85 @@ class CountdownMessage(QtWidgets.QFrame):
|
|||||||
painter.end()
|
painter.end()
|
||||||
|
|
||||||
|
|
||||||
|
class SetDateTime(QtWidgets.QFrame):
|
||||||
|
|
||||||
|
def __init__(self, cancel_action, restart_action):
|
||||||
|
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self._cancelAction = cancel_action
|
||||||
|
self._restartAction = restart_action
|
||||||
|
|
||||||
|
self.initFrame()
|
||||||
|
|
||||||
|
def initFrame(self):
|
||||||
|
|
||||||
|
layout = QtWidgets.QVBoxLayout()
|
||||||
|
layout.addWidget(self.createForm())
|
||||||
|
layout.addStretch(1)
|
||||||
|
layout.addWidget(self.createButtons())
|
||||||
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
def createForm(self):
|
||||||
|
|
||||||
|
self._date_widget = QtWidgets.QDateEdit(QtCore.QDate.currentDate())
|
||||||
|
self._date_widget.setCalendarPopup(True)
|
||||||
|
|
||||||
|
self._time_widget = QtWidgets.QTimeEdit(QtCore.QTime.currentTime())
|
||||||
|
|
||||||
|
layout = QtWidgets.QFormLayout()
|
||||||
|
layout.addRow('Date:', self._date_widget)
|
||||||
|
layout.addRow('Time:', self._time_widget)
|
||||||
|
|
||||||
|
widget = QtWidgets.QGroupBox()
|
||||||
|
widget.setTitle('Set system date and time:')
|
||||||
|
widget.setLayout(layout)
|
||||||
|
return widget
|
||||||
|
|
||||||
|
def createButtons(self):
|
||||||
|
|
||||||
|
layout = QtWidgets.QHBoxLayout()
|
||||||
|
layout.addStretch(1)
|
||||||
|
|
||||||
|
btnSave = QtWidgets.QPushButton('Save and restart')
|
||||||
|
btnSave.clicked.connect(self.saveAndRestart)
|
||||||
|
layout.addWidget(btnSave)
|
||||||
|
|
||||||
|
btnCancel = QtWidgets.QPushButton('Cancel')
|
||||||
|
btnCancel.clicked.connect(self._cancelAction)
|
||||||
|
layout.addWidget(btnCancel)
|
||||||
|
|
||||||
|
widget = QtWidgets.QGroupBox()
|
||||||
|
widget.setLayout(layout)
|
||||||
|
return widget
|
||||||
|
|
||||||
|
def saveAndRestart(self):
|
||||||
|
|
||||||
|
if os.name != 'posix':
|
||||||
|
raise NotImplementedError(('Setting time/date not yet implemented '
|
||||||
|
'for OS type "{}"'.format(os.name)))
|
||||||
|
|
||||||
|
date = self._date_widget.date()
|
||||||
|
time = self._time_widget.time()
|
||||||
|
datetime = '{:04d}{:02d}{:02d} {:02d}:{:02d}'.format(date.year(),
|
||||||
|
date.month(),
|
||||||
|
date.day(),
|
||||||
|
time.hour(),
|
||||||
|
time.minute())
|
||||||
|
logging.info(['sudo', '-A', 'date', '-s', datetime])
|
||||||
|
logging.info('Setting date to "{}"'.format(datetime))
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.run(['sudo', '-A', 'date', '-s', datetime],
|
||||||
|
stderr=subprocess.PIPE).check_returncode()
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
cmd = ' '.join(e.cmd)
|
||||||
|
msg = e.stderr.decode(sys.stdout.encoding)
|
||||||
|
logging.error('Failed to execute "{}": "{}"'.format(cmd, msg))
|
||||||
|
|
||||||
|
self._restartAction()
|
||||||
|
|
||||||
|
|
||||||
class Settings(QtWidgets.QFrame):
|
class Settings(QtWidgets.QFrame):
|
||||||
|
|
||||||
def __init__(self, config, reload_action, cancel_action, restart_action):
|
def __init__(self, config, reload_action, cancel_action, restart_action):
|
||||||
@@ -487,7 +586,8 @@ class Settings(QtWidgets.QFrame):
|
|||||||
|
|
||||||
def file_dialog():
|
def file_dialog():
|
||||||
dialog = QtWidgets.QFileDialog.getExistingDirectory
|
dialog = QtWidgets.QFileDialog.getExistingDirectory
|
||||||
basedir.setText(dialog(self, 'Select directory', expanduser('~'),
|
basedir.setText(dialog(self, 'Select directory',
|
||||||
|
os.expanduser('~'),
|
||||||
QtWidgets.QFileDialog.ShowDirsOnly))
|
QtWidgets.QFileDialog.ShowDirsOnly))
|
||||||
|
|
||||||
file_button = QtWidgets.QPushButton('Select directory')
|
file_button = QtWidgets.QPushButton('Select directory')
|
||||||
|
|||||||
@@ -131,11 +131,19 @@ class PyQt5Gui(GuiSkeleton):
|
|||||||
self._disableTrigger()
|
self._disableTrigger()
|
||||||
self._disableEscape()
|
self._disableEscape()
|
||||||
self._lastHandle = self._showWelcomeScreen
|
self._lastHandle = self._showWelcomeScreen
|
||||||
self._setWidget(Frames.Start(self._showStart, self._showSettings,
|
self._setWidget(Frames.Start(self._showStart, self._showSetDateTime,
|
||||||
self.close))
|
self._showSettings, self.close))
|
||||||
if QtWidgets.QApplication.overrideCursor() != 0:
|
if QtWidgets.QApplication.overrideCursor() != 0:
|
||||||
QtWidgets.QApplication.restoreOverrideCursor()
|
QtWidgets.QApplication.restoreOverrideCursor()
|
||||||
|
|
||||||
|
def _showSetDateTime(self):
|
||||||
|
|
||||||
|
self._disableTrigger()
|
||||||
|
self._disableEscape()
|
||||||
|
self._lastHandle = self._showSetDateTime
|
||||||
|
self._setWidget(Frames.SetDateTime(self._showWelcomeScreen,
|
||||||
|
self.restart))
|
||||||
|
|
||||||
def _showSettings(self):
|
def _showSettings(self):
|
||||||
|
|
||||||
self._disableTrigger()
|
self._disableTrigger()
|
||||||
|
|||||||
Reference in New Issue
Block a user