Thu, 27 Jun 2024 16:20:56 +0200
Added functionality to uninstall single or all pipx managed packages.
--- a/PipxInterface/Pipx.py Thu Jun 27 15:42:50 2024 +0200 +++ b/PipxInterface/Pipx.py Thu Jun 27 16:20:56 2024 +0200 @@ -305,3 +305,26 @@ return False, str(err) else: return False, output + + def uninstallPackage(self, package): + """ + Public method to uninstall the given package. + + @param package name of the package to be uninstalled + @type str + """ + args = ["uninstall", package] + dia = PipxExecDialog(self.tr("Uninstall Package")) + res = dia.startProcess(self.__getPipxExecutable(), args) + if res: + dia.exec() + + def uninstallAllPackages(self): + """ + Public method to uninstall all pipx managed packages. + """ + args = ["uninstall-all"] + dia = PipxExecDialog(self.tr("Uninstall All Packages")) + res = dia.startProcess(self.__getPipxExecutable(), args) + if res: + dia.exec()
--- a/PipxInterface/PipxWidget.py Thu Jun 27 15:42:50 2024 +0200 +++ b/PipxInterface/PipxWidget.py Thu Jun 27 16:20:56 2024 +0200 @@ -63,8 +63,8 @@ self.uninstallButton.setIcon(EricPixmapCache.getIcon("minus")) self.installButton.clicked.connect(self.__installPackages) - self.upgradeButton.clicked.connect(self.__upgradePackages) - self.uninstallButton.clicked.connect(self.__uninstallPackages) + self.upgradeButton.clicked.connect(self.__upgradePackage) + self.uninstallButton.clicked.connect(self.__uninstallPackage) self.pipxMenuButton.setAutoRaise(True) self.pipxMenuButton.setShowMenuInside(True) @@ -123,7 +123,7 @@ self.__upgradeSubmenu = QMenu(self.tr("Upgrade")) self.__upgradePackagesAct = self.__upgradeSubmenu.addAction( - self.tr("Upgrade Selected Packages"), self.__upgradePackages + self.tr("Upgrade Selected Package"), self.__upgradePackage ) self.__upgradeAllPackagesAct = self.__upgradeSubmenu.addAction( self.tr("Upgrade All Packages"), self.__upgradeAllPackages @@ -139,7 +139,7 @@ self.__uninstallSubmenu = QMenu(self.tr("Uninstall")) self.__uninstallPackagesAct = self.__uninstallSubmenu.addAction( - self.tr("Uninstall Selected Packages"), self.__uninstallPackages + self.tr("Uninstall Selected Package"), self.__uninstallPackage ) self.__uninstallAllPackagesAct = self.__uninstallSubmenu.addAction( self.tr("Uninstall All Packages"), self.__uninstallAllPackages @@ -277,9 +277,9 @@ pass @pyqtSlot() - def __upgradePackages(self): + def __upgradePackage(self): """ - Private slot to upgrade the selected packages. + Private slot to upgrade the selected package. """ # TODO: not implemented yet pass @@ -301,12 +301,21 @@ pass @pyqtSlot() - def __uninstallPackages(self): + def __uninstallPackage(self): + """ + Private slot to uninstall the selected package. """ - Private slot to uninstall the selected packages. - """ - # TODO: not implemented yet - pass + package = self.__selectedPackages()[0] + yes = EricMessageBox.yesNo( + self, + self.tr("Uninstall Package"), + self.tr( + "<p>Shall the package <b>{0}</b> really be uninstalled?</p>" + ).format(package), + ) + if yes: + self.__pipx.uninstallPackage(package) + self.on_refreshButton_clicked() @pyqtSlot() def __uninstallAllPackages(self): @@ -314,7 +323,16 @@ Private slot to uninstall all packages. """ # TODO: not implemented yet - pass + yes = EricMessageBox.yesNo( + self, + self.tr("Uninstall All Packages"), + self.tr( + "<p>Do you really want to uninstall <b>ALL</b> packages?</p>" + ), + ) + if yes: + self.__pipx.uninstallAllPackages() + self.on_refreshButton_clicked() ####################################################################### ## Main widget related methods below
--- a/PipxInterface/PipxWidget.ui Thu Jun 27 15:42:50 2024 +0200 +++ b/PipxInterface/PipxWidget.ui Thu Jun 27 16:20:56 2024 +0200 @@ -152,14 +152,14 @@ <item> <widget class="QToolButton" name="upgradeButton"> <property name="toolTip"> - <string>Press to upgrade the selected packages.</string> + <string>Press to upgrade the selected package.</string> </property> </widget> </item> <item> <widget class="QToolButton" name="uninstallButton"> <property name="toolTip"> - <string>Press to uninstall the selected packages.</string> + <string>Press to uninstall the selected package.</string> </property> </widget> </item>
--- a/PipxInterface/Ui_PipxWidget.py Thu Jun 27 15:42:50 2024 +0200 +++ b/PipxInterface/Ui_PipxWidget.py Thu Jun 27 16:20:56 2024 +0200 @@ -109,8 +109,8 @@ self.label_5.setText(_translate("PipxWidget", "Standalone Interpreters:")) self.refreshButton.setToolTip(_translate("PipxWidget", "Press to refresh the packages list.")) self.installButton.setToolTip(_translate("PipxWidget", "Press to install packages.")) - self.upgradeButton.setToolTip(_translate("PipxWidget", "Press to upgrade the selected packages.")) - self.uninstallButton.setToolTip(_translate("PipxWidget", "Press to uninstall the selected packages.")) + self.upgradeButton.setToolTip(_translate("PipxWidget", "Press to upgrade the selected package.")) + self.uninstallButton.setToolTip(_translate("PipxWidget", "Press to uninstall the selected package.")) self.packagesList.setSortingEnabled(True) self.packagesList.headerItem().setText(0, _translate("PipxWidget", "Package/Application")) self.packagesList.headerItem().setText(1, _translate("PipxWidget", "Version"))