PipxInterface/PipxInterpretersDialog.py

changeset 14
12413552ae0d
child 15
2fb8d19c38ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PipxInterface/PipxInterpretersDialog.py	Fri Jun 28 16:25:21 2024 +0200
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to show the available standalone Python interpreters.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QTreeWidgetItem
+
+from eric7.EricGui import EricPixmapCache
+
+from .Ui_PipxInterpretersDialog import Ui_PipxInterpretersDialog
+
+
+class PipxInterpretersDialog(QDialog, Ui_PipxInterpretersDialog):
+    """
+    Class implementing a dialog to show the available standalone Python interpreters.
+    """
+
+    def __init__(self, pipx, parent=None):
+        """
+        Constructor
+
+        @param pipx reference to the pipx interface
+        @type Pipx
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.refreshButton.setIcon(EricPixmapCache.getIcon("reload"))
+        self.upgradeButton.setIcon(EricPixmapCache.getIcon("upgrade"))
+        self.pruneButton.setIcon(EricPixmapCache.getIcon("clear"))
+
+        self.__pipx = pipx
+
+        self.refreshButton.clicked.connect(self.__populateInterpretersList)
+
+        self.__populateInterpretersList()
+
+    @pyqtSlot()
+    def __populateInterpretersList(self):
+        """
+        Private slot to populate the list of standalone Python interpreters.
+        """
+        self.interpretersList.clear()
+
+        interpreters = self.__pipx.getPipxInterpretersList()["interpreters"]
+        for interpreter in interpreters:
+            pyItem = QTreeWidgetItem(
+                self.interpretersList,
+                [
+                    self.tr("Python {0}{1}").format(
+                        interpreter,
+                        ""
+                        if interpreters[interpreter]["used"]
+                        else self.tr(" (unused)"),
+                    )
+                ]
+            )
+            for package, packageVersion in interpreters[interpreter]["used_by"]:
+                QTreeWidgetItem(
+                    pyItem,
+                    [
+                        self.tr("{0} {1}", "package, version")
+                        .format(package, packageVersion)
+                    ]
+                )
+                pyItem.setExpanded(True)
+
+    @pyqtSlot()
+    def on_upgradeButton_clicked(self):
+        """
+        Private slot to upgrade all pipx managed interpreters to the latest available
+        micro/patch version.
+        """
+        self.__pipx.upgradeInterpreters(dialogParent=self)
+        self.__populateInterpretersList()
+
+    @pyqtSlot()
+    def on_pruneButton_clicked(self):
+        """
+        Private slot to prune unused interpreters.
+        """
+        self.__pipx.pruneInterpreters(dialogParent=self)
+        self.__populateInterpretersList()

eric ide

mercurial