PipxInterface/PipxInterpretersDialog.py

Sun, 29 Dec 2024 14:56:04 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 29 Dec 2024 14:56:04 +0100
changeset 121
8deb7d8d9b86
parent 104
45c88e73e3dd
permissions
-rw-r--r--

Prepared a new release.

# -*- coding: utf-8 -*-

# Copyright (c) 2024 - 2025 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