nixview-python/main_window.py
2020-12-26 13:52:41 +01:00

115 lines
4.2 KiB
Python

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)