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.setCameraIdle()
|
||||
self._send.send(gui.IdleState())
|
||||
|
||||
while True:
|
||||
try:
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
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.QtGui import QImage, QPainter, QPixmap
|
||||
|
||||
@@ -24,7 +24,8 @@ class PyQt5Gui(Gui):
|
||||
self._app = QApplication(argv)
|
||||
self._p = PyQt5MainWindow()
|
||||
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):
|
||||
@@ -34,7 +35,6 @@ class PyQt5Gui(Gui):
|
||||
receiver.start()
|
||||
|
||||
self._transport = send
|
||||
self._p.transport = send
|
||||
|
||||
self.showStart()
|
||||
|
||||
@@ -91,7 +91,7 @@ class PyQt5Gui(Gui):
|
||||
img = ImageQt.ImageQt(state.picture)
|
||||
self._p.setCentralWidget(PyQt5PictureMessage('', img))
|
||||
|
||||
self._printer.print('test.pdf', state.picture)
|
||||
self._printer.print(state.picture)
|
||||
elif isinstance(state, ErrorState):
|
||||
self.showError(state.title, state.message)
|
||||
else:
|
||||
@@ -112,6 +112,13 @@ class PyQt5Gui(Gui):
|
||||
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):
|
||||
|
||||
self._p.handleKeypressEvent = self.handleKeypressEvent
|
||||
@@ -170,20 +177,6 @@ class PyQt5MainWindow(QMainWindow):
|
||||
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
|
||||
def handleKeypressEvent(self):
|
||||
|
||||
@@ -213,19 +206,13 @@ class PyQt5MainWindow(QMainWindow):
|
||||
self.show()
|
||||
|
||||
|
||||
def showMessage(self, message, picture=None):
|
||||
|
||||
content = PyQt5PictureMessage(message, picture)
|
||||
self.setCentralWidget(content)
|
||||
|
||||
|
||||
def closeEvent(self, e):
|
||||
|
||||
reply = QMessageBox.question(self, 'Confirmation', "Quit Photobooth?",
|
||||
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
||||
|
||||
if reply == QMessageBox.Yes:
|
||||
self.transport.close()
|
||||
# self.transport.close()
|
||||
e.accept()
|
||||
else:
|
||||
e.ignore()
|
||||
@@ -255,7 +242,7 @@ class PyQt5Start(QFrame):
|
||||
|
||||
btnStart = QPushButton('Start Photobooth')
|
||||
btnStart.resize(btnStart.sizeHint())
|
||||
btnStart.clicked.connect(gui.showIdle)
|
||||
btnStart.clicked.connect(gui.showStartPhotobooth)
|
||||
grid.addWidget(btnStart, 0, 0)
|
||||
|
||||
btnSettings = QPushButton('Settings')
|
||||
@@ -390,6 +377,7 @@ class PyQt5Settings(QFrame):
|
||||
widget.setLayout(layout)
|
||||
return widget
|
||||
|
||||
|
||||
def createCameraSettings(self):
|
||||
|
||||
global cfg
|
||||
@@ -571,7 +559,10 @@ class PyQt5PictureMessage(QFrame):
|
||||
else:
|
||||
pix = QPixmap(self._picture)
|
||||
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.end()
|
||||
|
||||
@@ -27,6 +27,11 @@ def lookup_and_import(module_list, name, package=None):
|
||||
|
||||
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:
|
||||
try:
|
||||
Camera = lookup_and_import(camera.modules, config.get('Camera', 'module'), 'camera')
|
||||
|
||||
@@ -11,20 +11,33 @@ from . import 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.setOutputFormat(QPrinter.PdfFormat)
|
||||
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 = 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.drawImage(QPoint(0, 0), img)
|
||||
painter.drawImage(QPoint(*offset), img)
|
||||
painter.end()
|
||||
|
||||
@@ -9,6 +9,27 @@ modules = (
|
||||
|
||||
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