import sys from PyQt5.QtWidgets import QFrame, QLabel, QListWidget, QMainWindow, QMenuBar, QStackedLayout, QToolBar, QAction, QStatusBar, QVBoxLayout, QWidget, QGridLayout, QSpacerItem, QSizePolicy from PyQt5.QtGui import QIcon, QPixmap, QKeySequence from PyQt5.QtCore import Qt, QSize import typing from file_handler import FileHandler class NixView(QMainWindow): def __init__(self, *args, **kwargs): super(NixView, self).__init__(*args, **kwargs) self.setWindowTitle("NixView") self.setWindowIcon(QIcon('./icons/nixview.icns')) self._file_handler = FileHandler() self.setStatusBar(QStatusBar(self)) self.setMenuBar(QMenuBar(self)) self.create_actions() cw = CentralWidget(self) self.setCentralWidget(cw) self.show() def create_actions(self): self._file_open_action = QAction(QIcon("./icons/nix_open.png"), "Open", self) self._file_open_action.setStatusTip("Open nix file") self._file_open_action.setShortcut(QKeySequence("Ctrl+o")) self._file_open_action.triggered.connect(self.on_file_open) self._file_close_action = QAction(QIcon("./icons/nix_close.png"), "Close", self) self._file_close_action.setStatusTip("Close current nix file") self._file_close_action.setShortcut(QKeySequence("Ctrl+w")) self._file_close_action.setEnabled(False) self._file_close_action.triggered.connect(self.on_file_close) self._quit_action = QAction(QIcon("./icons/quit.png"), "Quit", self) self._quit_action.setStatusTip("Close current file and quit") self._quit_action.triggered.connect(self.on_quit) self.create_toolbar() self.create_menu() def create_toolbar(self): self._toolbar = QToolBar("My main toolbar") self._toolbar.setIconSize(QSize(32, 32)) self._toolbar.addAction(self._file_open_action) self._toolbar.addAction(self._file_close_action) self._toolbar.addAction(self._quit_action) self.addToolBar(self._toolbar) def create_menu(self): menu = self.menuBar() file_menu = menu.addMenu("&File") file_menu.addAction(self._file_open_action) file_menu.addAction(self._file_close_action) file_menu.addAction(self._quit_action) self.setMenuBar(menu) def on_file_open(self, s): success, msg = self._file_handler.open("nix_test.h5") self.statusBar().showMessage(msg, 5000) self._file_close_action.setEnabled(success) def on_file_close(self, s): self._file_handler.close() self.statusBar().showMessage("Successfully closed current file", 1000) def on_quit(self, s): self._file_handler.close() sys.exit() class CentralWidget(QWidget): def __init__(self, parent=None) -> None: super().__init__(parent=parent) splash = SplashScreen() stack = QStackedLayout(self) stack.addWidget(splash) self.setLayout(stack) self.setStyleSheet("background-color: white;") class SplashScreen(QWidget): def __init__(self, parent=None) -> None: super().__init__(parent=parent) layout = QGridLayout() self.setLayout(layout) self.setStyleSheet("background-color: white;") label = QLabel() label.setPixmap(QPixmap("./icons/nixview256.png")) label.setAlignment(Qt.AlignCenter) layout.addWidget(label, 1, 1) verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) verticalSpacer2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) hSpacer = QSpacerItem(400, 20, QSizePolicy.Maximum, QSizePolicy.Expanding) hSpacer2 = QSpacerItem(400, 20, QSizePolicy.Maximum, QSizePolicy.Expanding) layout.addItem(verticalSpacer, 0, 1) layout.addItem(verticalSpacer2, 2, 1) layout.addItem(hSpacer, 1, 0) layout.addItem(hSpacer2, 1, 2) frame = QFrame() l = QVBoxLayout() l.addWidget(QLabel("Recently opened files:")) l.addWidget(QListWidget()) frame.setLayout(l) layout.addWidget(frame, 3, 1)