eric6/E5Gui/E5MainWindow.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
diff -r f99d60d6b59b -r 2602857055c5 eric6/E5Gui/E5MainWindow.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/E5Gui/E5MainWindow.py	Sun Apr 14 15:09:21 2019 +0200
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a main window class with styling support.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import QCoreApplication
+from PyQt5.QtWidgets import QMainWindow, QStyleFactory, QApplication
+
+from .E5Application import e5App
+from . import E5MessageBox
+
+
+class E5MainWindow(QMainWindow):
+    """
+    Class implementing a main window with styling support.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(E5MainWindow, self).__init__(parent)
+        
+        self.defaultStyleName = QApplication.style().objectName()
+    
+    def setStyle(self, styleName, styleSheetFile):
+        """
+        Public method to set the style of the interface.
+        
+        @param styleName name of the style to set (string)
+        @param styleSheetFile name of a style sheet file to read to overwrite
+            defaults of the given style (string)
+        """
+        # step 1: set the style
+        style = None
+        if styleName != "System" and styleName in QStyleFactory.keys():
+            style = QStyleFactory.create(styleName)
+        if style is None:
+            style = QStyleFactory.create(self.defaultStyleName)
+        if style is not None:
+            QApplication.setStyle(style)
+        
+        # step 2: set a style sheet
+        if styleSheetFile:
+            try:
+                f = open(styleSheetFile, "r", encoding="utf-8")
+                styleSheet = f.read()
+                f.close()
+            except (IOError, OSError) as msg:
+                E5MessageBox.warning(
+                    self,
+                    QCoreApplication.translate(
+                        "E5MainWindow", "Loading Style Sheet"),
+                    QCoreApplication.translate(
+                        "E5MainWindow",
+                        """<p>The Qt Style Sheet file <b>{0}</b> could"""
+                        """ not be read.<br>Reason: {1}</p>""")
+                    .format(styleSheetFile, str(msg)))
+                return
+        else:
+            styleSheet = ""
+        
+        e5App().setStyleSheet(styleSheet)

eric ide

mercurial