--- 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.