eric7/UI/UserInterface.py

branch
eric7
changeset 8970
188ff9ce8657
parent 8961
262f23f0cfa3
child 8972
54816b8f740f
--- a/eric7/UI/UserInterface.py	Sat Mar 05 16:03:04 2022 +0100
+++ b/eric7/UI/UserInterface.py	Sat Mar 05 18:01:12 2022 +0100
@@ -2477,7 +2477,21 @@
         self.showVersionsAct.triggered.connect(
             self.showAvailableVersionsInfo)
         self.actions.append(self.showVersionsAct)
-
+    
+        self.upgradePyQtAct = EricAction(
+            self.tr('Upgrade PyQt6'),
+            self.tr('Upgrade PyQt6...'),
+            0, 0, self, 'upgrade_pyqt6')
+        self.upgradePyQtAct.setStatusTip(
+            self.tr('Upgrade PyQt6 and restart eric'))
+        self.upgradePyQtAct.setWhatsThis(self.tr(
+            """<b>Upgrade PyQt6...</b>"""
+            """<p>Upgrade the PyQt6 packages eric depends on and restart"""
+            """ eric.</p>"""
+        ))
+        self.upgradePyQtAct.triggered.connect(self.upgradePyQt)
+        self.actions.append(self.upgradePyQtAct)
+    
         self.showErrorLogAct = EricAction(
             self.tr('Show Error Log'),
             self.tr('Show Error &Log...'),
@@ -3588,6 +3602,8 @@
         self.__menus["help"].addAction(self.checkUpdateAct)
         self.__menus["help"].addAction(self.showVersionsAct)
         self.__menus["help"].addSeparator()
+        self.__menus["help"].addAction(self.upgradePyQtAct)
+        self.__menus["help"].addSeparator()
         self.__menus["help"].addAction(self.showInstallInfoAct)
         self.__menus["help"].addSeparator()
         self.__menus["help"].addAction(self.showErrorLogAct)
@@ -4014,6 +4030,8 @@
         """
         Private slot to handle the Versions dialog.
         """
+        from .VersionsDialog import VersionsDialog
+        
         try:
             try:
                 from PyQt6 import sip
@@ -4086,7 +4104,7 @@
         
         versionText += self.tr("""</table>""")
         
-        EricMessageBox.about(self, Program, versionText)
+        VersionsDialog(self, Program, versionText)
         
     def __reportBug(self):
         """
@@ -4445,7 +4463,55 @@
             args.append("--start-session")
             args.extend(self.__restartArgs)
             QProcess.startDetached(program, args)
-        
+    
+    @pyqtSlot()
+    def upgradePyQt(self):
+        """
+        Public slot to upgrade the PyQt packages of the eric7 environment.
+        
+        @return flag indicating a successful upgrade
+        @rtype bool
+        """
+        yes = EricMessageBox.yesNo(
+            self,
+            self.tr("Upgrade PyQt"),
+            self.tr("""In order to upgrade PyQt eric needs to be closed. It"""
+                    """ will be restarted once the upgrade process has"""
+                    """ finished. This may take some time.\n\nShall the"""
+                    """ upgrade be done now?""")
+        )
+        
+        if yes and self.__shutdown():
+            self.__performUpgrade("pyqt")
+            return True
+        
+        return False
+    
+    def __performUpgrade(self, upgradeType):
+        """
+        Private method to perform the requested upgrade operation.
+        
+        This action needs to shut down eric first, start a non-PyQt application
+        performing the upgrade of the PyQt packages via pip and restart eric
+        with the passed arguments. The upgrade process is not visible.
+        
+        @param upgradeType upgrade operation (one of 'pyqt')
+        @type str
+        """
+        ericApp().closeAllWindows()
+        program = sys.executable
+        ericStartArgs = [
+            os.path.join(getConfig("ericDir"), "eric7.py"),
+            "--start-session",
+        ]
+        ericStartArgs.extend(self.__restartArgs)
+        
+        upgrader = os.path.join(
+            os.path.dirname(__file__), "upgrader.py"
+        )
+        upgraderArgs = [upgrader, "--" + upgradeType, "--"] + ericStartArgs
+        QProcess.startDetached(program, upgraderArgs)
+    
     def __newWindow(self):
         """
         Private slot to start a new instance of eric.

eric ide

mercurial