PDF-Printer for debugging, Pictures centered on screen and in print, Startup of Photobooth-Thread delayed
This commit is contained in:
@@ -67,6 +67,7 @@ class Photobooth:
|
|||||||
|
|
||||||
self._send = send
|
self._send = send
|
||||||
self.setCameraIdle()
|
self.setCameraIdle()
|
||||||
|
self._send.send(gui.IdleState())
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
from PIL import ImageQt
|
from PIL import ImageQt
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QObject, QThread, pyqtSignal
|
from PyQt5.QtCore import Qt, QObject, QPoint, QThread, pyqtSignal
|
||||||
from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QFormLayout, QFrame, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLayout, QLineEdit, QMainWindow, QMessageBox, QPushButton, QVBoxLayout)
|
from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QFormLayout, QFrame, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLayout, QLineEdit, QMainWindow, QMessageBox, QPushButton, QVBoxLayout)
|
||||||
from PyQt5.QtGui import QImage, QPainter, QPixmap
|
from PyQt5.QtGui import QImage, QPainter, QPixmap
|
||||||
|
|
||||||
@@ -24,7 +24,8 @@ class PyQt5Gui(Gui):
|
|||||||
self._app = QApplication(argv)
|
self._app = QApplication(argv)
|
||||||
self._p = PyQt5MainWindow()
|
self._p = PyQt5MainWindow()
|
||||||
self._lastState = self.showStart
|
self._lastState = self.showStart
|
||||||
self._printer = Printer((cfg.getInt('Printer', 'width'), cfg.getInt('Printer', 'height')))
|
self._printer = Printer((cfg.getInt('Printer', 'width'),
|
||||||
|
cfg.getInt('Printer', 'height')), True)
|
||||||
|
|
||||||
|
|
||||||
def run(self, send, recv):
|
def run(self, send, recv):
|
||||||
@@ -34,7 +35,6 @@ class PyQt5Gui(Gui):
|
|||||||
receiver.start()
|
receiver.start()
|
||||||
|
|
||||||
self._transport = send
|
self._transport = send
|
||||||
self._p.transport = send
|
|
||||||
|
|
||||||
self.showStart()
|
self.showStart()
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ class PyQt5Gui(Gui):
|
|||||||
img = ImageQt.ImageQt(state.picture)
|
img = ImageQt.ImageQt(state.picture)
|
||||||
self._p.setCentralWidget(PyQt5PictureMessage('', img))
|
self._p.setCentralWidget(PyQt5PictureMessage('', img))
|
||||||
|
|
||||||
self._printer.print('test.pdf', state.picture)
|
self._printer.print(state.picture)
|
||||||
elif isinstance(state, ErrorState):
|
elif isinstance(state, ErrorState):
|
||||||
self.showError(state.title, state.message)
|
self.showError(state.title, state.message)
|
||||||
else:
|
else:
|
||||||
@@ -112,6 +112,13 @@ class PyQt5Gui(Gui):
|
|||||||
self._p.setCentralWidget(PyQt5Settings(self))
|
self._p.setCentralWidget(PyQt5Settings(self))
|
||||||
|
|
||||||
|
|
||||||
|
def showStartPhotobooth(self):
|
||||||
|
|
||||||
|
self._lastState = self.showStartPhotobooth
|
||||||
|
self._transport.send('start')
|
||||||
|
self._p.setCentralWidget(PyQt5PictureMessage('Starting the photobooth...'))
|
||||||
|
|
||||||
|
|
||||||
def showIdle(self):
|
def showIdle(self):
|
||||||
|
|
||||||
self._p.handleKeypressEvent = self.handleKeypressEvent
|
self._p.handleKeypressEvent = self.handleKeypressEvent
|
||||||
@@ -170,20 +177,6 @@ class PyQt5MainWindow(QMainWindow):
|
|||||||
self.initUI()
|
self.initUI()
|
||||||
|
|
||||||
|
|
||||||
@property
|
|
||||||
def transport(self):
|
|
||||||
|
|
||||||
return self._transport
|
|
||||||
|
|
||||||
|
|
||||||
@transport.setter
|
|
||||||
def transport(self, new_transport):
|
|
||||||
|
|
||||||
if not hasattr(new_transport, 'send'):
|
|
||||||
raise ValueError('PyQt5MainWindow.transport must provide send()')
|
|
||||||
|
|
||||||
self._transport = new_transport
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def handleKeypressEvent(self):
|
def handleKeypressEvent(self):
|
||||||
|
|
||||||
@@ -213,19 +206,13 @@ class PyQt5MainWindow(QMainWindow):
|
|||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
|
|
||||||
def showMessage(self, message, picture=None):
|
|
||||||
|
|
||||||
content = PyQt5PictureMessage(message, picture)
|
|
||||||
self.setCentralWidget(content)
|
|
||||||
|
|
||||||
|
|
||||||
def closeEvent(self, e):
|
def closeEvent(self, e):
|
||||||
|
|
||||||
reply = QMessageBox.question(self, 'Confirmation', "Quit Photobooth?",
|
reply = QMessageBox.question(self, 'Confirmation', "Quit Photobooth?",
|
||||||
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
||||||
|
|
||||||
if reply == QMessageBox.Yes:
|
if reply == QMessageBox.Yes:
|
||||||
self.transport.close()
|
# self.transport.close()
|
||||||
e.accept()
|
e.accept()
|
||||||
else:
|
else:
|
||||||
e.ignore()
|
e.ignore()
|
||||||
@@ -255,7 +242,7 @@ class PyQt5Start(QFrame):
|
|||||||
|
|
||||||
btnStart = QPushButton('Start Photobooth')
|
btnStart = QPushButton('Start Photobooth')
|
||||||
btnStart.resize(btnStart.sizeHint())
|
btnStart.resize(btnStart.sizeHint())
|
||||||
btnStart.clicked.connect(gui.showIdle)
|
btnStart.clicked.connect(gui.showStartPhotobooth)
|
||||||
grid.addWidget(btnStart, 0, 0)
|
grid.addWidget(btnStart, 0, 0)
|
||||||
|
|
||||||
btnSettings = QPushButton('Settings')
|
btnSettings = QPushButton('Settings')
|
||||||
@@ -390,6 +377,7 @@ class PyQt5Settings(QFrame):
|
|||||||
widget.setLayout(layout)
|
widget.setLayout(layout)
|
||||||
return widget
|
return widget
|
||||||
|
|
||||||
|
|
||||||
def createCameraSettings(self):
|
def createCameraSettings(self):
|
||||||
|
|
||||||
global cfg
|
global cfg
|
||||||
@@ -571,7 +559,10 @@ class PyQt5PictureMessage(QFrame):
|
|||||||
else:
|
else:
|
||||||
pix = QPixmap(self._picture)
|
pix = QPixmap(self._picture)
|
||||||
pix = pix.scaled(self.rect().size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
pix = pix.scaled(self.rect().size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
||||||
painter.drawPixmap(pix.rect(), pix, pix.rect())
|
|
||||||
|
origin = ( (self.rect().width() - pix.width()) // 2,
|
||||||
|
(self.rect().height() - pix.height()) // 2 )
|
||||||
|
painter.drawPixmap(QPoint(*origin), pix)
|
||||||
|
|
||||||
painter.drawText(event.rect(), Qt.AlignCenter, self._message)
|
painter.drawText(event.rect(), Qt.AlignCenter, self._message)
|
||||||
painter.end()
|
painter.end()
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ def lookup_and_import(module_list, name, package=None):
|
|||||||
|
|
||||||
def main_photobooth(config, send, recv):
|
def main_photobooth(config, send, recv):
|
||||||
|
|
||||||
|
event = recv.recv()
|
||||||
|
if str(event) != 'start':
|
||||||
|
print('Unknown event received: ' + str(event))
|
||||||
|
raise RuntimeError('Unknown event received', str(event))
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
Camera = lookup_and_import(camera.modules, config.get('Camera', 'module'), 'camera')
|
Camera = lookup_and_import(camera.modules, config.get('Camera', 'module'), 'camera')
|
||||||
|
|||||||
@@ -11,20 +11,33 @@ from . import Printer
|
|||||||
|
|
||||||
class PrinterPyQt5(Printer):
|
class PrinterPyQt5(Printer):
|
||||||
|
|
||||||
def __init__(self, page_size):
|
def __init__(self, page_size, print_pdf=False):
|
||||||
|
|
||||||
super().__init__()
|
super().__init__(page_size)
|
||||||
|
|
||||||
self._printer = QPrinter(QPrinter.HighResolution)
|
self._printer = QPrinter(QPrinter.HighResolution)
|
||||||
self._printer.setOutputFormat(QPrinter.PdfFormat)
|
|
||||||
self._printer.setPageSize(QPageSize(QSizeF(*page_size), QPageSize.Millimeter))
|
self._printer.setPageSize(QPageSize(QSizeF(*page_size), QPageSize.Millimeter))
|
||||||
|
|
||||||
|
self._print_pdf = print_pdf
|
||||||
|
if self._print_pdf:
|
||||||
|
self._counter = 0
|
||||||
|
self._printer.setOutputFormat(QPrinter.PdfFormat)
|
||||||
|
self._printer.setFullPage(True)
|
||||||
|
|
||||||
def print(self, filename, picture):
|
|
||||||
|
def print(self, picture):
|
||||||
|
|
||||||
|
if self._print_pdf:
|
||||||
|
self._printer.setOutputFileName('print_' + str(self._counter) + '.pdf')
|
||||||
|
self._counter += 1
|
||||||
|
|
||||||
img = ImageQt.ImageQt(picture)
|
img = ImageQt.ImageQt(picture)
|
||||||
img = img.scaled(self._printer.pageRect().size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
img = img.scaled(self._printer.pageRect().size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
||||||
self._printer.setOutputFileName(filename)
|
|
||||||
|
printable_size = self._printer.pageRect(QPrinter.DevicePixel)
|
||||||
|
offset = ( (printable_size.width() - img.width()) // 2,
|
||||||
|
(printable_size.height() - img.height()) // 2 )
|
||||||
|
|
||||||
painter = QPainter(self._printer)
|
painter = QPainter(self._printer)
|
||||||
painter.drawImage(QPoint(0, 0), img)
|
painter.drawImage(QPoint(*offset), img)
|
||||||
painter.end()
|
painter.end()
|
||||||
|
|||||||
@@ -9,6 +9,27 @@ modules = (
|
|||||||
|
|
||||||
class Printer:
|
class Printer:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, page_size):
|
||||||
|
|
||||||
pass
|
self.pageSize = page_size
|
||||||
|
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pageSize(self):
|
||||||
|
|
||||||
|
return self._page_size
|
||||||
|
|
||||||
|
|
||||||
|
@pageSize.setter
|
||||||
|
def pageSize(self, page_size):
|
||||||
|
|
||||||
|
if not isinstance(page_size, (list, tuple)) or len(page_size) != 2:
|
||||||
|
raise ValueError('page_size must be a list/tuple of length 2')
|
||||||
|
|
||||||
|
self._page_size = page_size
|
||||||
|
|
||||||
|
|
||||||
|
def print(self, picture):
|
||||||
|
|
||||||
|
raise NotImplementedError('print function not implemented!')
|
||||||
|
|
||||||
Reference in New Issue
Block a user