Source code for optimeed.visualize.gui.gui_mainWindow

import signal
import sys

from PyQt5 import QtCore, QtWidgets, QtGui

if QtWidgets.QApplication.instance() is None:
[docs] app = QtWidgets.QApplication(sys.argv) # must initialize only once
[docs]def start_qt_mainloop(): """Starts qt mainloop, which is necessary for qt to handle events""" def handler_quit(sign_number, _): app.quit() sys.exit(sign_number) try: signal.signal(signal.SIGINT, handler_quit) except AttributeError: pass try: signal.signal(signal.SIGTSTP, handler_quit) except AttributeError: pass signal.signal(signal.SIGINT, signal.SIG_DFL) app.exec()
[docs]def stop_qt_mainloop(): """Stops qt mainloop and resumes to program""" app.quit()
[docs]class gui_mainWindow(QtWidgets.QMainWindow): """ Main class that spawns a Qt window. Use :meth:`~gui_mainWindow.run` to display it. """ def __init__(self, QtWidgetList, isLight=True, actionOnWindowClosed=None, neverCloseWindow=False, title_window='Awesome Visualisation Tool', size=None): """ :param QtWidgetList: List of QWidgets to display in the window :param isLight: Light theme option (bool) :param actionOnWindowClosed: Callback before the window closes (method) :param neverCloseWindow: Hide the option to kill the window (bool) :param title_window: Title of the window (str) :param size: Size of the window ([x, y]) """ # config super(gui_mainWindow, self).__init__() if not isLight: p = self.palette() # To change color p.setColor(QtGui.QPalette.Background, (30, 30, 30)) self.setPalette(p) self.mainbox = QtWidgets.QWidget() self.setCentralWidget(self.mainbox) self.mainbox.setLayout(QtWidgets.QVBoxLayout()) self.mainbox.layout().setContentsMargins(0, 0, 0, 0) self.setWindowTitle(title_window) if neverCloseWindow: self.setWindowFlag(QtCore.Qt.WindowCloseButtonHint, False) self.neverCloseWindow = neverCloseWindow # Add widgets - QtPlot splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical) self.mainbox.layout().addWidget(splitter) for widget in QtWidgetList: splitter.addWidget(widget) if size is not None: self.resize(*size) # QtCore.QTimer().singleShot(10, lambda: self.resize(*size)) self.actionOnWindowClosed = actionOnWindowClosed
[docs] def set_actionOnClose(self, actionOnWindowClosed): self.actionOnWindowClosed = actionOnWindowClosed
[docs] def closeEvent(self, event): if self.actionOnWindowClosed is not None: self.actionOnWindowClosed(self, event) super().closeEvent(event)
[docs] def run(self, hold=False): """Display the window""" self.show() self.repaint() if hold: self.hold()
@staticmethod
[docs] def hold(): start_qt_mainloop()
[docs] def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Escape: if not self.neverCloseWindow: self.deleteLater() self.closeEvent(None)