Source code for sas.qtgui.MainWindow.MainWindow

# UNLESS EXEPTIONALLY REQUIRED TRY TO AVOID IMPORTING ANY MODULES HERE
# ESPECIALLY ANYTHING IN SAS, SASMODELS NAMESPACE
import os
import sys

from sas.sasview import __version__ as SASVIEW_VERSION

from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QMdiArea
from PyQt5.QtWidgets import QSplashScreen
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt, QTimer

# Local UI
from sas.qtgui.UI import main_resources_rc
from .UI.MainWindowUI import Ui_SasView

[docs]class MainSasViewWindow(QMainWindow, Ui_SasView): # Main window of the application
[docs] def __init__(self, screen_resolution, parent=None): super(MainSasViewWindow, self).__init__(parent) self.setupUi(self) # Add the version number to window title self.setWindowTitle(f"SasView {SASVIEW_VERSION}") # define workspace for dialogs. self.workspace = QMdiArea(self) # some perspectives are fixed size. # the two scrollbars will help managing the workspace. self.workspace.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.workspace.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.screen_width = screen_resolution.width() self.screen_height = screen_resolution.height() self.setCentralWidget(self.workspace) QTimer.singleShot(100, self.showMaximized) # Temporary solution for problem with menubar on Mac if sys.platform == "darwin": # Mac self.menubar.setNativeMenuBar(False) # Create the gui manager from .GuiManager import GuiManager try: self.guiManager = GuiManager(self) except Exception as ex: import logging logging.error("Application failed with: "+str(ex))
[docs] def closeEvent(self, event): if self.guiManager.quitApplication(): event.accept() else: event.ignore()
[docs]def SplashScreen(): """ Displays splash screen as soon as humanely possible. The screen will disappear as soon as the event loop starts. """ pixmap_path = "images/SVwelcome_mini.png" if os.path.splitext(sys.argv[0])[1].lower() == ".py": pixmap_path = "src/sas/qtgui/images/SVwelcome_mini.png" pixmap = QPixmap(pixmap_path) splashScreen = QSplashScreen(pixmap) return splashScreen
[docs]def run_sasview(): app = QApplication([]) #Initialize logger from sas.logger_config import SetupLogger SetupLogger(__name__).config_development() # initialize sasmodels settings from sas import get_custom_config, get_user_dir if "SAS_DLL_PATH" not in os.environ: os.environ["SAS_DLL_PATH"] = os.path.join( get_user_dir(), "compiled_models") SAS_OPENCL = get_custom_config().SAS_OPENCL if SAS_OPENCL and "SAS_OPENCL" not in os.environ: os.environ["SAS_OPENCL"] = SAS_OPENCL # Make the event loop interruptable quickly import signal signal.signal(signal.SIGINT, signal.SIG_DFL) # Main must have reference to the splash screen, so making it explicit splash = SplashScreen() splash.show() app.setAttribute(Qt.AA_EnableHighDpiScaling) # Main application style. #app.setStyle('Fusion') # fix for pyinstaller packages app to avoid ReactorAlreadyInstalledError if 'twisted.internet.reactor' in sys.modules: del sys.modules['twisted.internet.reactor'] # DO NOT move the following import to the top! # (unless you know what you're doing) import qt5reactor # Using the Qt5 reactor wrapper from https://github.com/ghtdak/qtreactor qt5reactor.install() # DO NOT move the following import to the top! from twisted.internet import reactor screen_resolution = app.desktop().screenGeometry() # Show the main SV window mainwindow = MainSasViewWindow(screen_resolution) # no more splash screen splash.finish(mainwindow) # Time for the welcome window mainwindow.guiManager.showWelcomeMessage() # No need to .exec_ - the reactor takes care of it. reactor.run()
if __name__ == "__main__": run_sasview()