From 7671a0220ee0a1419b80b14455d1ed9bf9b3d9a4 Mon Sep 17 00:00:00 2001 From: Ingmar Jager Date: Wed, 30 Oct 2019 17:58:55 +0100 Subject: [PATCH] Create QtMainwindow with ctrl-c and cmd-q exit signals --- app/Pipfile | 1 + app/Pipfile.lock | 10 ++++- app/app.py | 97 +++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 101 insertions(+), 7 deletions(-) diff --git a/app/Pipfile b/app/Pipfile index bece011..cd3f4dd 100644 --- a/app/Pipfile +++ b/app/Pipfile @@ -7,6 +7,7 @@ verify_ssl = true [packages] pyside2 = "*" +pyserial = "*" [requires] python_version = "3.7" diff --git a/app/Pipfile.lock b/app/Pipfile.lock index 638e03c..963b440 100644 --- a/app/Pipfile.lock +++ b/app/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "c3519552c85ca1e142a7df1017a2ac185e3a094522b094beb7d999991e0083dc" + "sha256": "a9148d363b8ce6e7cdd401507109b14c730ba93a1898210f7c331aaf2d46816b" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,14 @@ ] }, "default": { + "pyserial": { + "hashes": [ + "sha256:6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627", + "sha256:e0770fadba80c31013896c7e6ef703f72e7834965954a78e71a3049488d4d7d8" + ], + "index": "pypi", + "version": "==3.4" + }, "pyside2": { "hashes": [ "sha256:02986ba0215691980d7b126049c9aa392ffa5174079113bc5e62684bde625cb6", diff --git a/app/app.py b/app/app.py index c907849..983c208 100644 --- a/app/app.py +++ b/app/app.py @@ -1,15 +1,92 @@ import sys import random -from PySide2 import QtCore, QtWidgets, QtGui +import signal +from PySide2 import Qt, QtCore, QtWidgets, QtGui + +import serial +from serial.tools import list_ports + +from tools import set_background_color + +FPS = 20 + +class MainWindow(QtWidgets.QMainWindow): + """ + Class docstring + """ + + def __init__(self): + super(MainWindow, self).__init__() + + self._running = True + exitShortcut = QtWidgets.QShortcut("CTRL+Q", self) + exitShortcut.activated.connect(self.close) # calls closeEvent + + self._setupView() + + self.timer = QtCore.QTimer() + self.timer.timeout.connect(self._update) + self.timer.start(1000/FPS) + + self.popup = None + + def _setupView(self): + """Initialize Main Window""" + # self.setWindowIcon(QtGui.QIcon('assets/icon.png')) + self.setGeometry(50, 50, 1600, 900) + self.setWindowTitle("Serial Console") + set_background_color(self, 'white') + + # self.setCentralWidget(self.terminal.view) + # self._center() + # self.raise_() + # self.activateWindow() + + def closeEvent(self, event): + """Handle window close event""" + if event: + # self.terminal.close() + event.accept() + if not self._running: + return + print('shutting down..') + self._running = False + + def quit(self, _signal=None, _=None): + """ Signal Handler to quit the program """ + self.close() + + def _error_popup(self, msg): + QtWidgets.QMessageBox.critical(self, "Unexpected Error", msg) + + def _center(self): + """ Center Window on current display """ + frameGm = self.frameGeometry() + screen = QtWidgets.QApplication.desktop().screenNumber(QtWidgets.QApplication.desktop().cursor().pos()) + centerPoint = QtWidgets.QApplication.desktop().screenGeometry(screen).center() + frameGm.moveCenter(centerPoint) + self.move(frameGm.topLeft()) + + def _update(self): + """ Gui Thread poll """ + if not self._running: + # not running, pass update + self.close() + return + pass class MyWidget(QtWidgets.QWidget): def __init__(self): - super().__init__() + super(MyWidget, self).__init__() + + availablePorts = list_ports.comports() + + portsString = ''.join([p.device + '\n' for p in availablePorts]) self.hello = ["Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"] self.button = QtWidgets.QPushButton("Click me!") - self.text = QtWidgets.QLabel("Hello World") + self.text = QtWidgets.QLabel(portsString) self.text.setAlignment(QtCore.Qt.AlignCenter) self.layout = QtWidgets.QVBoxLayout() @@ -20,6 +97,8 @@ def __init__(self): self.button.clicked.connect(self.magic) + + def magic(self): self.text.setText(random.choice(self.hello)) @@ -28,7 +107,13 @@ def magic(self): app = QtWidgets.QApplication([]) widget = MyWidget() - widget.resize(800, 600) - widget.show() - sys.exit(app.exec_()) + window = MainWindow() + window.setCentralWidget(widget) + + window.show() + signal.signal(signal.SIGINT, window.quit) + # signal.signal(signal.SIGINT, signal.SIG_DFL) + + if sys.flags.interactive != 1: + sys.exit(app.exec_())