- Added a shortcut button to show the outdated dependencies of the selected package.

Tue, 10 Dec 2024 17:50:48 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 10 Dec 2024 17:50:48 +0100
changeset 106
dcc8d6b448fa
parent 105
21a992bf9872
child 107
365a7b3ec288

- Added a shortcut button to show the outdated dependencies of the selected package.
- Added the capability to upgrade just selected package dependencies.

PipxInterface/ConfigurationPage/Ui_PipxPage.py file | annotate | diff | comparison | revisions
PipxInterface/Pipx.py file | annotate | diff | comparison | revisions
PipxInterface/PipxDependenciesDialog.py file | annotate | diff | comparison | revisions
PipxInterface/PipxWidget.py file | annotate | diff | comparison | revisions
PipxInterface/PipxWidget.ui file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxAppStartDialog.py file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxDependenciesDialog.py file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxExecDialog.py file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxInterpretersDialog.py file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxPackagesInputDialog.py file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxReinstallDialog.py file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxSpecInputDialog.py file | annotate | diff | comparison | revisions
PipxInterface/Ui_PipxWidget.py file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_de.qm file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_de.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_empty.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_en.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_es.ts file | annotate | diff | comparison | revisions
PipxInterface/i18n/pipx_ru.ts file | annotate | diff | comparison | revisions
PipxInterface/icons/dependency-dark.svg file | annotate | diff | comparison | revisions
PipxInterface/icons/dependency-light.svg file | annotate | diff | comparison | revisions
PluginPipxInterface.py file | annotate | diff | comparison | revisions
PluginPipxInterface.zip file | annotate | diff | comparison | revisions
changelog.md file | annotate | diff | comparison | revisions
--- a/PipxInterface/ConfigurationPage/Ui_PipxPage.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/ConfigurationPage/Ui_PipxPage.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/ConfigurationPage/PipxPage.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Pipx.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Pipx.py	Tue Dec 10 17:50:48 2024 +0100
@@ -784,25 +784,37 @@
             (d["name"], d["version"]) for d in dependenciesList if d["name"] != package
         ]
 
-    def upgradePackageDependencies(self, package):
+    def upgradePackageDependencies(self, package, dependencies=None):
         """
         Public method to upgrade the dependencies of the given package.
 
         @param package name of the package
         @type str
+        @param dependencies list of dependencies to be upgraded or None to
+            upgrade all outdated dependencies (defaults to None)
+        @type list of str or None (optional)
         """
-        outdatedDependencies = [
-            d[0] for d in self.getOutdatedPackageDependencies(package=package)
-        ]
-        args = [
-            "runpip",
-            package,
-            "install",
-            "--upgrade",
-            "--prefer-binary",
-        ] + outdatedDependencies
+        if dependencies is None:
+            dependencies = [
+                d[0] for d in self.getOutdatedPackageDependencies(package=package)
+            ]
 
-        dia = PipxExecDialog(self.tr("Upgrade Dependencies"), parent=self.__ui)
-        res = dia.startProcess(self.__getPipxExecutable(), args)
-        if res:
-            dia.exec()
+        if dependencies:
+            args = [
+                "runpip",
+                package,
+                "install",
+                "--upgrade",
+                "--prefer-binary",
+            ] + dependencies
+
+            dia = PipxExecDialog(self.tr("Upgrade Dependencies"), parent=self.__ui)
+            res = dia.startProcess(self.__getPipxExecutable(), args)
+            if res:
+                dia.exec()
+        else:
+            EricMessageBox.information(
+                self.__ui,
+                self.tr("Upgrade Dependencies"),
+                self.tr("""All dependencies are already up-to-date."""),
+            )
--- a/PipxInterface/PipxDependenciesDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/PipxDependenciesDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -7,7 +7,13 @@
 """
 
 from PyQt6.QtCore import Qt, pyqtSlot
-from PyQt6.QtWidgets import QAbstractButton, QDialog, QDialogButtonBox, QTreeWidgetItem
+from PyQt6.QtWidgets import (
+    QAbstractButton,
+    QAbstractItemView,
+    QDialog,
+    QDialogButtonBox,
+    QTreeWidgetItem,
+)
 
 from .Ui_PipxDependenciesDialog import Ui_PipxDependenciesDialog
 
@@ -25,7 +31,10 @@
     InstalledVersionColumn = 1
     AvailableVersionColumn = 2
 
-    UpgradeDependenciesAction = 10  # sent by done() when dependencies shall be upgraded
+    UpgradeAllDependenciesAction = 10
+    # sent by done() when all dependencies shall be upgraded
+    UpgradeSelectedDependenciesAction = 11
+    # sent by done() when selected dependencies shall be upgraded
 
     def __init__(self, package, dependencies, mode, parent=None):
         """
@@ -43,7 +52,10 @@
         super().__init__(parent)
         self.setupUi(self)
 
-        self.__upgradeButton = None
+        self.__mode = mode
+
+        self.__upgradeAllButton = None
+        self.__upgradeSelectedButton = None
 
         if mode != PipxDependenciesDialog.OutdatedMode:
             self.dependenciesList.hideColumn(
@@ -52,8 +64,16 @@
 
         if mode == PipxDependenciesDialog.OutdatedMode:
             headerMsg = self.tr("Outdated Dependencies of package <b>{0}</b>")
-            self.__upgradeButton = self.buttonBox.addButton(
-                self.tr("Upgrade Dependencies"), QDialogButtonBox.ButtonRole.ActionRole
+            self.__upgradeSelectedButton = self.buttonBox.addButton(
+                self.tr("Upgrade Selected Dependencies"),
+                QDialogButtonBox.ButtonRole.ActionRole,
+            )
+            self.__upgradeAllButton = self.buttonBox.addButton(
+                self.tr("Upgrade All Dependencies"),
+                QDialogButtonBox.ButtonRole.ActionRole,
+            )
+            self.dependenciesList.setSelectionMode(
+                QAbstractItemView.SelectionMode.ExtendedSelection
             )
         elif mode == PipxDependenciesDialog.UptodateMode:
             headerMsg = self.tr("Up-to-date Dependencies of package <b>{0}</b>")
@@ -69,6 +89,12 @@
         )
         self.__resizeColumns()
 
+        if mode == PipxDependenciesDialog.OutdatedMode:
+            self.__upgradeAllButton.setEnabled(
+                self.dependenciesList.topLevelItemCount()
+            )
+            self.__upgradeSelectedButton.setEnabled(False)
+
     def __resizeColumns(self):
         """
         Private method to resize the columns of the dependencies list.
@@ -92,5 +118,35 @@
         @param button reference to the clicked button
         @type QAbstractButton
         """
-        if button == self.__upgradeButton:
-            self.done(PipxDependenciesDialog.UpgradeDependenciesAction)
+        if button == self.__upgradeAllButton:
+            self.done(PipxDependenciesDialog.UpgradeAllDependenciesAction)
+        elif button == self.__upgradeSelectedButton:
+            self.done(PipxDependenciesDialog.UpgradeSelectedDependenciesAction)
+
+    @pyqtSlot()
+    def on_dependenciesList_itemSelectionChanged(self):
+        """
+        Private slot to update the UI when the package selection changes.
+        """
+        if self.__mode == PipxDependenciesDialog.OutdatedMode:
+            self.__upgradeSelectedButton.setEnabled(
+                len(self.dependenciesList.selectedItems())
+            )
+
+    def getDependencies(self, selectedOnly=True):
+        """
+        Public method to get the list of selected or all dependencies.
+
+        @param selectedOnly flag indicated to get only the selected dependencies
+            (defaults to True)
+        @type boolTYPE (optional)
+        @return list of names of dependencies
+        @rtype list of str
+        """
+        if selectedOnly:
+            return [itm.text(0) for itm in self.dependenciesList.selectedItems()]
+        else:
+            return [
+                self.dependenciesList.topLevelItem(index).text(0)
+                for index in range(self.dependenciesList.topLevelItemCount())
+            ]
--- a/PipxInterface/PipxWidget.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/PipxWidget.py	Tue Dec 10 17:50:48 2024 +0100
@@ -65,17 +65,29 @@
         else:
             self.layout().setContentsMargins(0, 0, 0, 0)
 
+        iconSuffix = "-dark" if ericApp().usesDarkPalette() else "-light"
+
         self.pipxMenuButton.setIcon(EricPixmapCache.getIcon("superMenu"))
         self.refreshButton.setIcon(EricPixmapCache.getIcon("reload"))
         self.installButton.setIcon(EricPixmapCache.getIcon("plus"))
         self.outdatedButton.setIcon(EricPixmapCache.getIcon("question"))
         self.upgradeButton.setIcon(EricPixmapCache.getIcon("upgrade"))
         self.uninstallButton.setIcon(EricPixmapCache.getIcon("minus"))
+        self.showOutdatedDependenciesButton.setIcon(
+            EricPixmapCache.getIcon(
+                os.path.join(
+                    "PipxInterface", "icons", "dependency{0}".format(iconSuffix)
+                )
+            )
+        )
 
         self.installButton.clicked.connect(self.__installPackages)
         self.outdatedButton.clicked.connect(self.__checkOutdatedPackages)
         self.upgradeButton.clicked.connect(self.__upgradePackage)
         self.uninstallButton.clicked.connect(self.__uninstallPackage)
+        self.showOutdatedDependenciesButton.clicked.connect(
+            self.__showOutdatedDependencies
+        )
 
         self.pipxMenuButton.setShowMenuInside(True)
 
@@ -189,7 +201,7 @@
         )
         self.__dependenciseSubmenu.addSeparator()
         self.__upgradeDependenciesAct = self.__dependenciseSubmenu.addAction(
-            self.tr("Upgrade Dependencies"), self.__upgradeDependencies
+            self.tr("Upgrade All Dependencies"), self.__upgradeDependencies
         )
 
         ###################################################################
@@ -593,9 +605,14 @@
             parent=self,
         )
         result = dlg.exec()
-        if result == PipxDependenciesDialog.UpgradeDependenciesAction:
-            # 'Upgrade Dependencies' clicked
-            self.__upgradeDependencies()
+        if result == PipxDependenciesDialog.UpgradeAllDependenciesAction:
+            # 'Upgrade All Dependencies' clicked
+            dependencies = dlg.getDependencies(selectedOnly=False)
+            self.__upgradeDependencies(dependencies=dependencies)
+        elif result == PipxDependenciesDialog.UpgradeSelectedDependenciesAction:
+            # 'Upgrade Selected Dependencies' clicked
+            dependencies = dlg.getDependencies(selectedOnly=True)
+            self.__upgradeDependencies(dependencies=dependencies)
 
     @pyqtSlot()
     def __showUptodateDependencies(self):
@@ -616,12 +633,18 @@
         dlg.exec()
 
     @pyqtSlot()
-    def __upgradeDependencies(self):
+    def __upgradeDependencies(self, dependencies=None):
         """
         Private slot to upgrade the outdated dependencies of the selected package.
+
+        @param dependencies list of dependencies to be upgraded or None to
+            upgrade all outdated dependencies (defaults to None)
+        @type list of str or None (optional)
         """
         package = self.__selectedPackages()[0]
-        self.__pipx.upgradePackageDependencies(package=package)
+        self.__pipx.upgradePackageDependencies(
+            package=package, dependencies=dependencies
+        )
         packageItem = self.__getItemForPackage(package)
         if packageItem:
             self.__checkPackageOutdated(packageItem)
@@ -828,6 +851,13 @@
         )
         self.uninstallButton.setEnabled(len(selectedPackageItems) == 1)
 
+        self.showOutdatedDependenciesButton.setEnabled(
+            len(selectedPackageItems) == 1
+            and bool(
+                selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole)
+            )
+        )
+
     def __selectedPackages(self):
         """
         Private method to determine the list of selected packages.
--- a/PipxInterface/PipxWidget.ui	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/PipxWidget.ui	Tue Dec 10 17:50:48 2024 +0100
@@ -16,7 +16,7 @@
      <item>
       <spacer name="horizontalSpacer_4">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -36,7 +36,7 @@
      <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -49,7 +49,7 @@
      <item>
       <widget class="EricToolButton" name="pipxMenuButton">
        <property name="popupMode">
-        <enum>QToolButton::InstantPopup</enum>
+        <enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum>
        </property>
       </widget>
      </item>
@@ -125,7 +125,7 @@
      <item>
       <spacer name="horizontalSpacer_2">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -171,9 +171,23 @@
       </widget>
      </item>
      <item>
+      <widget class="Line" name="line">
+       <property name="orientation">
+        <enum>Qt::Orientation::Vertical</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="showOutdatedDependenciesButton">
+       <property name="toolTip">
+        <string>Press to show a dialog with the outdated dependencies.</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <spacer name="horizontalSpacer_3">
        <property name="orientation">
-        <enum>Qt::Horizontal</enum>
+        <enum>Qt::Orientation::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
@@ -191,7 +205,7 @@
       <bool>true</bool>
      </property>
      <property name="selectionMode">
-      <enum>QAbstractItemView::ExtendedSelection</enum>
+      <enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
      </property>
      <property name="sortingEnabled">
       <bool>true</bool>
@@ -229,6 +243,7 @@
   <tabstop>outdatedButton</tabstop>
   <tabstop>upgradeButton</tabstop>
   <tabstop>uninstallButton</tabstop>
+  <tabstop>showOutdatedDependenciesButton</tabstop>
   <tabstop>pipxMenuButton</tabstop>
   <tabstop>venvsPathEdit</tabstop>
   <tabstop>applicationsPathEdit</tabstop>
--- a/PipxInterface/Ui_PipxAppStartDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxAppStartDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxAppStartDialog.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Ui_PipxDependenciesDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxDependenciesDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxDependenciesDialog.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Ui_PipxExecDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxExecDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxExecDialog.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Ui_PipxInterpretersDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxInterpretersDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxInterpretersDialog.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Ui_PipxPackagesInputDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxPackagesInputDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxPackagesInputDialog.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Ui_PipxReinstallDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxReinstallDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxReinstallDialog.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Ui_PipxSpecInputDialog.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxSpecInputDialog.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxSpecInputDialog.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.1
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
--- a/PipxInterface/Ui_PipxWidget.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/Ui_PipxWidget.py	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'PipxInterface/PipxWidget.ui'
 #
-# Created by: PyQt6 UI code generator 6.8.0.dev2411221125
+# Created by: PyQt6 UI code generator 6.8.0
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
@@ -82,6 +82,14 @@
         self.uninstallButton = QtWidgets.QToolButton(parent=PipxWidget)
         self.uninstallButton.setObjectName("uninstallButton")
         self.horizontalLayout_2.addWidget(self.uninstallButton)
+        self.line = QtWidgets.QFrame(parent=PipxWidget)
+        self.line.setFrameShape(QtWidgets.QFrame.Shape.VLine)
+        self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+        self.line.setObjectName("line")
+        self.horizontalLayout_2.addWidget(self.line)
+        self.showOutdatedDependenciesButton = QtWidgets.QToolButton(parent=PipxWidget)
+        self.showOutdatedDependenciesButton.setObjectName("showOutdatedDependenciesButton")
+        self.horizontalLayout_2.addWidget(self.showOutdatedDependenciesButton)
         spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
         self.horizontalLayout_2.addItem(spacerItem3)
         self.verticalLayout.addLayout(self.horizontalLayout_2)
@@ -98,7 +106,8 @@
         PipxWidget.setTabOrder(self.installButton, self.outdatedButton)
         PipxWidget.setTabOrder(self.outdatedButton, self.upgradeButton)
         PipxWidget.setTabOrder(self.upgradeButton, self.uninstallButton)
-        PipxWidget.setTabOrder(self.uninstallButton, self.pipxMenuButton)
+        PipxWidget.setTabOrder(self.uninstallButton, self.showOutdatedDependenciesButton)
+        PipxWidget.setTabOrder(self.showOutdatedDependenciesButton, self.pipxMenuButton)
         PipxWidget.setTabOrder(self.pipxMenuButton, self.venvsPathEdit)
         PipxWidget.setTabOrder(self.venvsPathEdit, self.applicationsPathEdit)
         PipxWidget.setTabOrder(self.applicationsPathEdit, self.manPagesPathEdit)
@@ -116,6 +125,7 @@
         self.outdatedButton.setToolTip(_translate("PipxWidget", "Press to check for outdated packages."))
         self.upgradeButton.setToolTip(_translate("PipxWidget", "Press to upgrade the selected package."))
         self.uninstallButton.setToolTip(_translate("PipxWidget", "Press to uninstall the selected package."))
+        self.showOutdatedDependenciesButton.setToolTip(_translate("PipxWidget", "Press to show a dialog with the outdated dependencies."))
         self.packagesList.setSortingEnabled(True)
         self.packagesList.headerItem().setText(0, _translate("PipxWidget", "Package/Application"))
         self.packagesList.headerItem().setText(1, _translate("PipxWidget", "Version"))
Binary file PipxInterface/i18n/pipx_de.qm has changed
--- a/PipxInterface/i18n/pipx_de.ts	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/i18n/pipx_de.ts	Tue Dec 10 17:50:48 2024 +0100
@@ -138,10 +138,16 @@
       <translation>&lt;p&gt;Der Status der Abhängigkeiten des Pakets &lt;b&gt;{0}&lt;/b&gt; konnte nicht ermittelt werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="805" />
+      <location filename="../Pipx.py" line="818" />
+      <location filename="../Pipx.py" line="811" />
       <source>Upgrade Dependencies</source>
       <translation>Abhängigkeiten aktualisieren</translation>
     </message>
+    <message>
+      <location filename="../Pipx.py" line="819" />
+      <source>All dependencies are already up-to-date.</source>
+      <translation>Alle Abhängigkeiten sind bereits aktuell.</translation>
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -199,22 +205,27 @@
   <context>
     <name>PipxDependenciesDialog</name>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="54" />
+      <location filename="../PipxDependenciesDialog.py" line="66" />
       <source>Outdated Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Veraltete Abhängigkeiten des Pakets &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="56" />
-      <source>Upgrade Dependencies</source>
-      <translation>Abhängigkeiten aktualisieren</translation>
+      <location filename="../PipxDependenciesDialog.py" line="68" />
+      <source>Upgrade Selected Dependencies</source>
+      <translation>Ausgewählte Abhängigkeiten aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="59" />
+      <location filename="../PipxDependenciesDialog.py" line="72" />
+      <source>Upgrade All Dependencies</source>
+      <translation>Alle Abhängigkeiten aktualisieren</translation>
+    </message>
+    <message>
+      <location filename="../PipxDependenciesDialog.py" line="79" />
       <source>Up-to-date Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Aktuelle Abhängigkeiten des Pakets &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="61" />
+      <location filename="../PipxDependenciesDialog.py" line="81" />
       <source>Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Abhängigkeiten des Pakets &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
@@ -571,229 +582,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="126" />
+      <location filename="../PipxWidget.py" line="137" />
       <source>Install</source>
       <translation>Installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="259" />
-      <location filename="../PipxWidget.py" line="128" />
+      <location filename="../PipxWidget.py" line="270" />
+      <location filename="../PipxWidget.py" line="139" />
       <source>Install Packages</source>
       <translation>Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="278" />
-      <location filename="../PipxWidget.py" line="131" />
+      <location filename="../PipxWidget.py" line="289" />
+      <location filename="../PipxWidget.py" line="142" />
       <source>Install All Packages</source>
       <translation>Alle Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="135" />
+      <location filename="../PipxWidget.py" line="146" />
       <source>Re-Install Selected Package</source>
       <translation>Ausgewähltes Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="376" />
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="387" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Re-Install All Packages</source>
       <translation>Alle Pakete neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="334" />
-      <location filename="../PipxWidget.py" line="325" />
-      <location filename="../PipxWidget.py" line="313" />
-      <location filename="../PipxWidget.py" line="297" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="345" />
+      <location filename="../PipxWidget.py" line="336" />
+      <location filename="../PipxWidget.py" line="324" />
+      <location filename="../PipxWidget.py" line="308" />
+      <location filename="../PipxWidget.py" line="153" />
       <source>Create Spec Metadata File</source>
       <translation>Erzeuge Spec-Metadaten-Datei</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="160" />
       <source>Upgrade</source>
       <translation>Aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="151" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Check Outdated Packages</source>
       <translation>Prüfe veraltete Pakete</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="464" />
-      <location filename="../PipxWidget.py" line="155" />
+      <location filename="../PipxWidget.py" line="475" />
+      <location filename="../PipxWidget.py" line="166" />
       <source>Upgrade Selected Package</source>
       <translation>Ausgewähltes Paket aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="489" />
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="500" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Upgrade All Packages</source>
       <translation>Alle Pakete aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="173" />
       <source>Upgrade Shared Libraries</source>
       <translation>Gemeinsame Bibliotheken aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="180" />
       <source>Uninstall</source>
       <translation>Deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="171" />
+      <location filename="../PipxWidget.py" line="182" />
       <source>Uninstall Selected Package</source>
       <translation>Ausgewähltes Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="531" />
-      <location filename="../PipxWidget.py" line="174" />
+      <location filename="../PipxWidget.py" line="542" />
+      <location filename="../PipxWidget.py" line="185" />
       <source>Uninstall All Packages</source>
       <translation>Alle Pakete deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="181" />
+      <location filename="../PipxWidget.py" line="192" />
       <source>Dependencies</source>
       <translation>Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="183" />
+      <location filename="../PipxWidget.py" line="194" />
       <source>Show All Dependencies</source>
       <translation>Zeige Alle Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="186" />
+      <location filename="../PipxWidget.py" line="197" />
       <source>Show Outdated Dependencies</source>
       <translation>Zeige Veraltete Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="189" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Zeige Aktuelle Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="193" />
-      <source>Upgrade Dependencies</source>
-      <translation>Abhängigkeiten aktualisieren</translation>
+      <location filename="../PipxWidget.py" line="204" />
+      <source>Upgrade All Dependencies</source>
+      <translation>Alle Abhängigkeiten aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="212" />
+      <location filename="../PipxWidget.py" line="223" />
       <source>Standalone Interpreters</source>
       <translation>Eigenständige Interpreter</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="216" />
+      <location filename="../PipxWidget.py" line="227" />
       <source>Ensure PATH Modifications</source>
       <translation>PATH-Änderungen sicherstellen</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="219" />
+      <location filename="../PipxWidget.py" line="230" />
       <source>Configure...</source>
       <translation>Einstellungen...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="299" />
+      <location filename="../PipxWidget.py" line="310" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>JSON Dateien (*.json);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="300" />
+      <location filename="../PipxWidget.py" line="311" />
       <source>JSON Files (*.json)</source>
       <translation>JSON-Dateien (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="314" />
+      <location filename="../PipxWidget.py" line="325" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="326" />
+      <location filename="../PipxWidget.py" line="337" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Spec-Metadaten-Datei &lt;b&gt;{0}&lt;/b&gt; wurde erfolgreich erzeugt.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="335" />
+      <location filename="../PipxWidget.py" line="346" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Spec-Metadaten-Datei &lt;b&gt;{0}&lt;/b&gt; konnte nicht erzeugt werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="351" />
+      <location filename="../PipxWidget.py" line="362" />
       <source>Re-Install Package</source>
       <translation>Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="352" />
+      <location filename="../PipxWidget.py" line="363" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Soll das Paket &lt;b&gt;{0}&lt;/b&gt; wirklich neu installiert werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="377" />
+      <location filename="../PipxWidget.py" line="388" />
       <source>Do you really want to reinstall all packages?</source>
       <translation>Sollen wirklich alle Pakete neu installiert werden?</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="465" />
+      <location filename="../PipxWidget.py" line="476" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das ausgewählte Paket kann nicht aktualisiert werden, da einige seiner Anwendungen ausgeführt werden.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Beende diese Anwendungen und versuche es erneut.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="490" />
+      <location filename="../PipxWidget.py" line="501" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Pakete können nicht aktualisiert werden, da einige ihrer Anwendungen ausgeführt werden.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Beende diese Anwendungen und versuche es erneut.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="515" />
+      <location filename="../PipxWidget.py" line="526" />
       <source>Uninstall Package</source>
       <translation>Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="516" />
+      <location filename="../PipxWidget.py" line="527" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Soll das Paket &lt;b&gt;{0}&lt;/b&gt; wirklich deinstalliert werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="532" />
+      <location filename="../PipxWidget.py" line="543" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Sollen wirklich &lt;b&gt;ALLE&lt;/b&gt; Pakete deinstalliert werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="639" />
+      <location filename="../PipxWidget.py" line="664" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation>&lt;b&gt;pipx Version {0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="669" />
+      <location filename="../PipxWidget.py" line="694" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="677" />
+      <location filename="../PipxWidget.py" line="702" />
       <source>package and some dependencies outdated</source>
       <translation>Paket und einige Abhängigkeiten veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="680" />
+      <location filename="../PipxWidget.py" line="705" />
       <source>package outdated</source>
       <translation>Paket veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="719" />
       <source>some dependencies outdated</source>
       <translation>einige Abhängigkeiten veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="709" />
+      <location filename="../PipxWidget.py" line="734" />
       <source>everything up-to-date</source>
       <translation>alles aktuell</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="736" />
+      <location filename="../PipxWidget.py" line="761" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation>{0}{1}</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="738" />
+      <location filename="../PipxWidget.py" line="763" />
       <source> (standalone)</source>
       <translation> (eigenständig)</translation>
     </message>
@@ -849,6 +860,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to show a dialog with the outdated dependencies.</source>
+      <translation>Drücken, um einen Dialog mit allen veralteten Abhängigkeiten anzuzeigen.</translation>
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation>Paket/Anwendung</translation>
     </message>
--- a/PipxInterface/i18n/pipx_empty.ts	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/i18n/pipx_empty.ts	Tue Dec 10 17:50:48 2024 +0100
@@ -138,10 +138,16 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="805" />
+      <location filename="../Pipx.py" line="818" />
+      <location filename="../Pipx.py" line="811" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Pipx.py" line="819" />
+      <source>All dependencies are already up-to-date.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -199,22 +205,27 @@
   <context>
     <name>PipxDependenciesDialog</name>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="54" />
+      <location filename="../PipxDependenciesDialog.py" line="66" />
       <source>Outdated Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="56" />
-      <source>Upgrade Dependencies</source>
+      <location filename="../PipxDependenciesDialog.py" line="68" />
+      <source>Upgrade Selected Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="59" />
+      <location filename="../PipxDependenciesDialog.py" line="72" />
+      <source>Upgrade All Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxDependenciesDialog.py" line="79" />
       <source>Up-to-date Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="61" />
+      <location filename="../PipxDependenciesDialog.py" line="81" />
       <source>Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -571,229 +582,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="126" />
+      <location filename="../PipxWidget.py" line="137" />
       <source>Install</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="259" />
-      <location filename="../PipxWidget.py" line="128" />
+      <location filename="../PipxWidget.py" line="270" />
+      <location filename="../PipxWidget.py" line="139" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="278" />
-      <location filename="../PipxWidget.py" line="131" />
+      <location filename="../PipxWidget.py" line="289" />
+      <location filename="../PipxWidget.py" line="142" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="135" />
+      <location filename="../PipxWidget.py" line="146" />
       <source>Re-Install Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="376" />
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="387" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="334" />
-      <location filename="../PipxWidget.py" line="325" />
-      <location filename="../PipxWidget.py" line="313" />
-      <location filename="../PipxWidget.py" line="297" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="345" />
+      <location filename="../PipxWidget.py" line="336" />
+      <location filename="../PipxWidget.py" line="324" />
+      <location filename="../PipxWidget.py" line="308" />
+      <location filename="../PipxWidget.py" line="153" />
       <source>Create Spec Metadata File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="160" />
       <source>Upgrade</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="151" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Check Outdated Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="464" />
-      <location filename="../PipxWidget.py" line="155" />
+      <location filename="../PipxWidget.py" line="475" />
+      <location filename="../PipxWidget.py" line="166" />
       <source>Upgrade Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="489" />
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="500" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="173" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="180" />
       <source>Uninstall</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="171" />
+      <location filename="../PipxWidget.py" line="182" />
       <source>Uninstall Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="531" />
-      <location filename="../PipxWidget.py" line="174" />
+      <location filename="../PipxWidget.py" line="542" />
+      <location filename="../PipxWidget.py" line="185" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="181" />
+      <location filename="../PipxWidget.py" line="192" />
       <source>Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="183" />
+      <location filename="../PipxWidget.py" line="194" />
       <source>Show All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="186" />
+      <location filename="../PipxWidget.py" line="197" />
       <source>Show Outdated Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="189" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Show Up-to-date Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="193" />
-      <source>Upgrade Dependencies</source>
+      <location filename="../PipxWidget.py" line="204" />
+      <source>Upgrade All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="212" />
+      <location filename="../PipxWidget.py" line="223" />
       <source>Standalone Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="216" />
+      <location filename="../PipxWidget.py" line="227" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="219" />
+      <location filename="../PipxWidget.py" line="230" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="299" />
+      <location filename="../PipxWidget.py" line="310" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="300" />
+      <location filename="../PipxWidget.py" line="311" />
       <source>JSON Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="314" />
+      <location filename="../PipxWidget.py" line="325" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="326" />
+      <location filename="../PipxWidget.py" line="337" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="335" />
+      <location filename="../PipxWidget.py" line="346" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="351" />
+      <location filename="../PipxWidget.py" line="362" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="352" />
+      <location filename="../PipxWidget.py" line="363" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="377" />
+      <location filename="../PipxWidget.py" line="388" />
       <source>Do you really want to reinstall all packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="465" />
+      <location filename="../PipxWidget.py" line="476" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="490" />
+      <location filename="../PipxWidget.py" line="501" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="515" />
+      <location filename="../PipxWidget.py" line="526" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="516" />
+      <location filename="../PipxWidget.py" line="527" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="532" />
+      <location filename="../PipxWidget.py" line="543" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="639" />
+      <location filename="../PipxWidget.py" line="664" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="669" />
+      <location filename="../PipxWidget.py" line="694" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="677" />
+      <location filename="../PipxWidget.py" line="702" />
       <source>package and some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="680" />
+      <location filename="../PipxWidget.py" line="705" />
       <source>package outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="719" />
       <source>some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="709" />
+      <location filename="../PipxWidget.py" line="734" />
       <source>everything up-to-date</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="736" />
+      <location filename="../PipxWidget.py" line="761" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="738" />
+      <location filename="../PipxWidget.py" line="763" />
       <source> (standalone)</source>
       <translation type="unfinished" />
     </message>
@@ -849,6 +860,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to show a dialog with the outdated dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation type="unfinished" />
     </message>
--- a/PipxInterface/i18n/pipx_en.ts	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/i18n/pipx_en.ts	Tue Dec 10 17:50:48 2024 +0100
@@ -138,10 +138,16 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="805" />
+      <location filename="../Pipx.py" line="818" />
+      <location filename="../Pipx.py" line="811" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Pipx.py" line="819" />
+      <source>All dependencies are already up-to-date.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -199,22 +205,27 @@
   <context>
     <name>PipxDependenciesDialog</name>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="54" />
+      <location filename="../PipxDependenciesDialog.py" line="66" />
       <source>Outdated Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="56" />
-      <source>Upgrade Dependencies</source>
+      <location filename="../PipxDependenciesDialog.py" line="68" />
+      <source>Upgrade Selected Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="59" />
+      <location filename="../PipxDependenciesDialog.py" line="72" />
+      <source>Upgrade All Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxDependenciesDialog.py" line="79" />
       <source>Up-to-date Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="61" />
+      <location filename="../PipxDependenciesDialog.py" line="81" />
       <source>Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -571,229 +582,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="126" />
+      <location filename="../PipxWidget.py" line="137" />
       <source>Install</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="259" />
-      <location filename="../PipxWidget.py" line="128" />
+      <location filename="../PipxWidget.py" line="270" />
+      <location filename="../PipxWidget.py" line="139" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="278" />
-      <location filename="../PipxWidget.py" line="131" />
+      <location filename="../PipxWidget.py" line="289" />
+      <location filename="../PipxWidget.py" line="142" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="135" />
+      <location filename="../PipxWidget.py" line="146" />
       <source>Re-Install Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="376" />
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="387" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="334" />
-      <location filename="../PipxWidget.py" line="325" />
-      <location filename="../PipxWidget.py" line="313" />
-      <location filename="../PipxWidget.py" line="297" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="345" />
+      <location filename="../PipxWidget.py" line="336" />
+      <location filename="../PipxWidget.py" line="324" />
+      <location filename="../PipxWidget.py" line="308" />
+      <location filename="../PipxWidget.py" line="153" />
       <source>Create Spec Metadata File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="160" />
       <source>Upgrade</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="151" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Check Outdated Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="464" />
-      <location filename="../PipxWidget.py" line="155" />
+      <location filename="../PipxWidget.py" line="475" />
+      <location filename="../PipxWidget.py" line="166" />
       <source>Upgrade Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="489" />
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="500" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="173" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="180" />
       <source>Uninstall</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="171" />
+      <location filename="../PipxWidget.py" line="182" />
       <source>Uninstall Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="531" />
-      <location filename="../PipxWidget.py" line="174" />
+      <location filename="../PipxWidget.py" line="542" />
+      <location filename="../PipxWidget.py" line="185" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="181" />
+      <location filename="../PipxWidget.py" line="192" />
       <source>Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="183" />
+      <location filename="../PipxWidget.py" line="194" />
       <source>Show All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="186" />
+      <location filename="../PipxWidget.py" line="197" />
       <source>Show Outdated Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="189" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Show Up-to-date Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="193" />
-      <source>Upgrade Dependencies</source>
+      <location filename="../PipxWidget.py" line="204" />
+      <source>Upgrade All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="212" />
+      <location filename="../PipxWidget.py" line="223" />
       <source>Standalone Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="216" />
+      <location filename="../PipxWidget.py" line="227" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="219" />
+      <location filename="../PipxWidget.py" line="230" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="299" />
+      <location filename="../PipxWidget.py" line="310" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="300" />
+      <location filename="../PipxWidget.py" line="311" />
       <source>JSON Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="314" />
+      <location filename="../PipxWidget.py" line="325" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="326" />
+      <location filename="../PipxWidget.py" line="337" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="335" />
+      <location filename="../PipxWidget.py" line="346" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="351" />
+      <location filename="../PipxWidget.py" line="362" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="352" />
+      <location filename="../PipxWidget.py" line="363" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="377" />
+      <location filename="../PipxWidget.py" line="388" />
       <source>Do you really want to reinstall all packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="465" />
+      <location filename="../PipxWidget.py" line="476" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="490" />
+      <location filename="../PipxWidget.py" line="501" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="515" />
+      <location filename="../PipxWidget.py" line="526" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="516" />
+      <location filename="../PipxWidget.py" line="527" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="532" />
+      <location filename="../PipxWidget.py" line="543" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="639" />
+      <location filename="../PipxWidget.py" line="664" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="669" />
+      <location filename="../PipxWidget.py" line="694" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="677" />
+      <location filename="../PipxWidget.py" line="702" />
       <source>package and some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="680" />
+      <location filename="../PipxWidget.py" line="705" />
       <source>package outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="719" />
       <source>some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="709" />
+      <location filename="../PipxWidget.py" line="734" />
       <source>everything up-to-date</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="736" />
+      <location filename="../PipxWidget.py" line="761" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="738" />
+      <location filename="../PipxWidget.py" line="763" />
       <source> (standalone)</source>
       <translation type="unfinished" />
     </message>
@@ -849,6 +860,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to show a dialog with the outdated dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation type="unfinished" />
     </message>
--- a/PipxInterface/i18n/pipx_es.ts	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/i18n/pipx_es.ts	Tue Dec 10 17:50:48 2024 +0100
@@ -138,10 +138,16 @@
       <translation>&lt;p&gt;El estado de las dependencias del package &lt;b&gt;{0}&lt;/b&gt; no se han podido determinar.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="805" />
+      <location filename="../Pipx.py" line="818" />
+      <location filename="../Pipx.py" line="811" />
       <source>Upgrade Dependencies</source>
       <translation>Actualizar Dependencias</translation>
     </message>
+    <message>
+      <location filename="../Pipx.py" line="819" />
+      <source>All dependencies are already up-to-date.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -199,22 +205,27 @@
   <context>
     <name>PipxDependenciesDialog</name>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="54" />
+      <location filename="../PipxDependenciesDialog.py" line="66" />
       <source>Outdated Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Depedencias desactualizadas del package &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="56" />
-      <source>Upgrade Dependencies</source>
-      <translation>Actualizar Dependencias</translation>
+      <location filename="../PipxDependenciesDialog.py" line="68" />
+      <source>Upgrade Selected Dependencies</source>
+      <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="59" />
+      <location filename="../PipxDependenciesDialog.py" line="72" />
+      <source>Upgrade All Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxDependenciesDialog.py" line="79" />
       <source>Up-to-date Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Dependencias actualizadas del package &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="61" />
+      <location filename="../PipxDependenciesDialog.py" line="81" />
       <source>Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Dependencias del package &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
@@ -238,6 +249,10 @@
       <source>Available Version</source>
       <translation>Versión Disponible</translation>
     </message>
+    <message>
+      <source>Upgrade Dependencies</source>
+      <translation type="vanished">Actualizar Dependencias</translation>
+    </message>
   </context>
   <context>
     <name>PipxExecDialog</name>
@@ -571,229 +586,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="126" />
+      <location filename="../PipxWidget.py" line="137" />
       <source>Install</source>
       <translation>Instalar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="259" />
-      <location filename="../PipxWidget.py" line="128" />
+      <location filename="../PipxWidget.py" line="270" />
+      <location filename="../PipxWidget.py" line="139" />
       <source>Install Packages</source>
       <translation>Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="278" />
-      <location filename="../PipxWidget.py" line="131" />
+      <location filename="../PipxWidget.py" line="289" />
+      <location filename="../PipxWidget.py" line="142" />
       <source>Install All Packages</source>
       <translation>Instalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="135" />
+      <location filename="../PipxWidget.py" line="146" />
       <source>Re-Install Selected Package</source>
       <translation>Reinstalar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="376" />
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="387" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Re-Install All Packages</source>
       <translation>Reinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="334" />
-      <location filename="../PipxWidget.py" line="325" />
-      <location filename="../PipxWidget.py" line="313" />
-      <location filename="../PipxWidget.py" line="297" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="345" />
+      <location filename="../PipxWidget.py" line="336" />
+      <location filename="../PipxWidget.py" line="324" />
+      <location filename="../PipxWidget.py" line="308" />
+      <location filename="../PipxWidget.py" line="153" />
       <source>Create Spec Metadata File</source>
       <translation>Crear Archivo de Metadatos de Spec</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="160" />
       <source>Upgrade</source>
       <translation>Actualizar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="151" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Check Outdated Packages</source>
       <translation>Comprobar Packages Desactualizados</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="464" />
-      <location filename="../PipxWidget.py" line="155" />
+      <location filename="../PipxWidget.py" line="475" />
+      <location filename="../PipxWidget.py" line="166" />
       <source>Upgrade Selected Package</source>
       <translation>Actualizar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="489" />
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="500" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Upgrade All Packages</source>
       <translation>Actualizar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="173" />
       <source>Upgrade Shared Libraries</source>
       <translation>Actualizar Bibliotecas Compartidas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="180" />
       <source>Uninstall</source>
       <translation>Desinstalar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="171" />
+      <location filename="../PipxWidget.py" line="182" />
       <source>Uninstall Selected Package</source>
       <translation>Desinstalar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="531" />
-      <location filename="../PipxWidget.py" line="174" />
+      <location filename="../PipxWidget.py" line="542" />
+      <location filename="../PipxWidget.py" line="185" />
       <source>Uninstall All Packages</source>
       <translation>Desinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="181" />
+      <location filename="../PipxWidget.py" line="192" />
       <source>Dependencies</source>
       <translation>Dependencias</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="183" />
+      <location filename="../PipxWidget.py" line="194" />
       <source>Show All Dependencies</source>
       <translation>Mostrar Todas las Dependencias</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="186" />
+      <location filename="../PipxWidget.py" line="197" />
       <source>Show Outdated Dependencies</source>
       <translation>Mostrar Dependencias Desactualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="189" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Mostrar Dependencias Actualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="193" />
-      <source>Upgrade Dependencies</source>
-      <translation>Actualizar Dependencias</translation>
+      <location filename="../PipxWidget.py" line="204" />
+      <source>Upgrade All Dependencies</source>
+      <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="212" />
+      <location filename="../PipxWidget.py" line="223" />
       <source>Standalone Interpreters</source>
       <translation>Intérpretes Independientes</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="216" />
+      <location filename="../PipxWidget.py" line="227" />
       <source>Ensure PATH Modifications</source>
       <translation>Asegurar modificaciones de PATH</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="219" />
+      <location filename="../PipxWidget.py" line="230" />
       <source>Configure...</source>
       <translation>Configurar...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="299" />
+      <location filename="../PipxWidget.py" line="310" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>Archivos JSON (*.json);;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="300" />
+      <location filename="../PipxWidget.py" line="311" />
       <source>JSON Files (*.json)</source>
       <translation>Archivos JSON (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="314" />
+      <location filename="../PipxWidget.py" line="325" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="326" />
+      <location filename="../PipxWidget.py" line="337" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de metadatos de spec &lt;b&gt;{0}&lt;/b&gt; se ha creado con éxito&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="335" />
+      <location filename="../PipxWidget.py" line="346" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de metadatos de spec &lt;b&gt;{0}&lt;/b&gt; no se ha podido crear.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="351" />
+      <location filename="../PipxWidget.py" line="362" />
       <source>Re-Install Package</source>
       <translation>Reinstalar Package</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="352" />
+      <location filename="../PipxWidget.py" line="363" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;¿Debe ser el package &lt;b&gt;{0}&lt;/b&gt; reinstalado seguro?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="377" />
+      <location filename="../PipxWidget.py" line="388" />
       <source>Do you really want to reinstall all packages?</source>
       <translation>¿Desea seguro reinstalar todos los packages?</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="465" />
+      <location filename="../PipxWidget.py" line="476" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El package seleccionado no se puede actualizar porque algunas de sus apps están en ejecución.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Detener estasapps e intentar de nuevo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="490" />
+      <location filename="../PipxWidget.py" line="501" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Los packages no se pueden actualizar porque algunas de sus apps están en ejecución.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Detener estas apps e intentar de nuevo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="515" />
+      <location filename="../PipxWidget.py" line="526" />
       <source>Uninstall Package</source>
       <translation>Desinstalar Package</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="516" />
+      <location filename="../PipxWidget.py" line="527" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;¿Debe ser el package &lt;b&gt;{0}&lt;/b&gt; desinstalado seguro?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="532" />
+      <location filename="../PipxWidget.py" line="543" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation>&lt;p&gt;¿Desea seguro desinstalar &lt;b&gt;TODOS&lt;/b&gt; los packages?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="639" />
+      <location filename="../PipxWidget.py" line="664" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation>&lt;b&gt;pipx Versión {0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="669" />
+      <location filename="../PipxWidget.py" line="694" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="677" />
+      <location filename="../PipxWidget.py" line="702" />
       <source>package and some dependencies outdated</source>
       <translation>package y algunas dependencias desactualizados</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="680" />
+      <location filename="../PipxWidget.py" line="705" />
       <source>package outdated</source>
       <translation>package desactualizado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="694" />
+      <location filename="../PipxWidget.py" line="719" />
       <source>some dependencies outdated</source>
       <translation>algunas dependencias desactualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="709" />
+      <location filename="../PipxWidget.py" line="734" />
       <source>everything up-to-date</source>
       <translation>todo actualizado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="736" />
+      <location filename="../PipxWidget.py" line="761" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation>{0}{1}</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="738" />
+      <location filename="../PipxWidget.py" line="763" />
       <source> (standalone)</source>
       <translation> (independiente)</translation>
     </message>
@@ -849,6 +864,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to show a dialog with the outdated dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation>Package/Aplicación</translation>
     </message>
@@ -863,6 +883,10 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <source>Upgrade Dependencies</source>
+      <translation type="vanished">Actualizar Dependencias</translation>
+    </message>
+    <message>
       <source>Python Version</source>
       <translation type="vanished">Versión de python</translation>
     </message>
--- a/PipxInterface/i18n/pipx_ru.ts	Tue Dec 10 17:43:42 2024 +0100
+++ b/PipxInterface/i18n/pipx_ru.ts	Tue Dec 10 17:50:48 2024 +0100
@@ -138,10 +138,16 @@
       <translation>&lt;p&gt;Не удалось определить статус зависимостей пакета &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="805" />
+      <location filename="../Pipx.py" line="818" />
+      <location filename="../Pipx.py" line="811" />
       <source>Upgrade Dependencies</source>
       <translation>Обновление зависимостей</translation>
     </message>
+    <message>
+      <location filename="../Pipx.py" line="819" />
+      <source>All dependencies are already up-to-date.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipxAppStartDialog</name>
@@ -199,22 +205,27 @@
   <context>
     <name>PipxDependenciesDialog</name>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="54" />
+      <location filename="../PipxDependenciesDialog.py" line="66" />
       <source>Outdated Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Устаревшие зависимости пакета &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="56" />
-      <source>Upgrade Dependencies</source>
-      <translation>Обновить зависимости</translation>
+      <location filename="../PipxDependenciesDialog.py" line="68" />
+      <source>Upgrade Selected Dependencies</source>
+      <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="59" />
+      <location filename="../PipxDependenciesDialog.py" line="72" />
+      <source>Upgrade All Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxDependenciesDialog.py" line="79" />
       <source>Up-to-date Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Обновленные зависимости пакета &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxDependenciesDialog.py" line="61" />
+      <location filename="../PipxDependenciesDialog.py" line="81" />
       <source>Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
       <translation>Зависимости пакета &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
@@ -238,6 +249,10 @@
       <source>Available Version</source>
       <translation>Доступная версия</translation>
     </message>
+    <message>
+      <source>Upgrade Dependencies</source>
+      <translation type="vanished">Обновить зависимости</translation>
+    </message>
   </context>
   <context>
     <name>PipxExecDialog</name>
@@ -571,229 +586,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="126" />
+      <location filename="../PipxWidget.py" line="137" />
       <source>Install</source>
       <translation>Установить</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="259" />
-      <location filename="../PipxWidget.py" line="128" />
+      <location filename="../PipxWidget.py" line="270" />
+      <location filename="../PipxWidget.py" line="139" />
       <source>Install Packages</source>
       <translation>Установить пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="278" />
-      <location filename="../PipxWidget.py" line="131" />
+      <location filename="../PipxWidget.py" line="289" />
+      <location filename="../PipxWidget.py" line="142" />
       <source>Install All Packages</source>
       <translation>Установить все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="135" />
+      <location filename="../PipxWidget.py" line="146" />
       <source>Re-Install Selected Package</source>
       <translation>Переустановить выбранный пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="376" />
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="387" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Re-Install All Packages</source>
       <translation>Переустановить все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="334" />
-      <location filename="../PipxWidget.py" line="325" />
-      <location filename="../PipxWidget.py" line="313" />
-      <location filename="../PipxWidget.py" line="297" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="345" />
+      <location filename="../PipxWidget.py" line="336" />
+      <location filename="../PipxWidget.py" line="324" />
+      <location filename="../PipxWidget.py" line="308" />
+      <location filename="../PipxWidget.py" line="153" />
       <source>Create Spec Metadata File</source>
       <translation>Создать файл спецификации метаданных</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="160" />
       <source>Upgrade</source>
       <translation>Обновить</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="151" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Check Outdated Packages</source>
       <translation>Проверить устаревшие пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="464" />
-      <location filename="../PipxWidget.py" line="155" />
+      <location filename="../PipxWidget.py" line="475" />
+      <location filename="../PipxWidget.py" line="166" />
       <source>Upgrade Selected Package</source>
       <translation>Обновить выбранный пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="489" />
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="500" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Upgrade All Packages</source>
       <translation>Обновить все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="162" />
+      <location filename="../PipxWidget.py" line="173" />
       <source>Upgrade Shared Libraries</source>
       <translation>Обновить общие библиотеки</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="169" />
+      <location filename="../PipxWidget.py" line="180" />
       <source>Uninstall</source>
       <translation>Деинсталировать</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="171" />
+      <location filename="../PipxWidget.py" line="182" />
       <source>Uninstall Selected Package</source>
       <translation>Деинсталировать выбранный пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="531" />
-      <location filename="../PipxWidget.py" line="174" />
+      <location filename="../PipxWidget.py" line="542" />
+      <location filename="../PipxWidget.py" line="185" />
       <source>Uninstall All Packages</source>
       <translation>Деинсталировать все пакеты</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="181" />
+      <location filename="../PipxWidget.py" line="192" />
       <source>Dependencies</source>
       <translation>Зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="183" />
+      <location filename="../PipxWidget.py" line="194" />
       <source>Show All Dependencies</source>
       <translation>Показать все зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="186" />
+      <location filename="../PipxWidget.py" line="197" />
       <source>Show Outdated Dependencies</source>
       <translation>Показать устаревшие зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="189" />
+      <location filename="../PipxWidget.py" line="200" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Показать актуальные зависимости</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="193" />
-      <source>Upgrade Dependencies</source>
-      <translation>Обновить зависимости</translation>
+      <location filename="../PipxWidget.py" line="204" />
+      <source>Upgrade All Dependencies</source>
+      <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="212" />
+      <location filename="../PipxWidget.py" line="223" />
       <source>Standalone Interpreters</source>
       <translation>Автономные интерпретаторы</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="216" />
+      <location filename="../PipxWidget.py" line="227" />
       <source>Ensure PATH Modifications</source>
       <translation>Внести изменения в переменную PATH</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="219" />
+      <location filename="../PipxWidget.py" line="230" />
       <source>Configure...</source>
       <translation>Настройка...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="299" />
+      <location filename="../PipxWidget.py" line="310" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>Файлы JSON (*.json);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="300" />
+      <location filename="../PipxWidget.py" line="311" />
       <source>JSON Files (*.json)</source>
       <translation>Файлы JSON (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="314" />
+      <location filename="../PipxWidget.py" line="325" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Перезаписать?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="326" />
+      <location filename="../PipxWidget.py" line="337" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; was created successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл спецификации метаданных  &lt;b&gt;{0}&lt;/b&gt; был успешно создан.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="335" />
+      <location filename="../PipxWidget.py" line="346" />
       <source>&lt;p&gt;The spec metadata file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось создать файл спецификации метаданных &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="351" />
+      <location filename="../PipxWidget.py" line="362" />
       <source>Re-Install Package</source>
       <translation>Переустановить пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="352" />
+      <location filename="../PipxWidget.py" line="363" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be reinstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Действительно ли пакет &lt;b&gt;{0}&lt;/b&gt; должен быть переустановлен?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="377" />
+      <location filename="../PipxWidget.py" line="388" />
       <source>Do you really want to reinstall all packages?</source>
       <translation>Вы действительно хотите переустановить все пакеты?</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="465" />
+      <location filename="../PipxWidget.py" line="476" />
       <source>&lt;p&gt;The selected package cannot be upgraded because some of its apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Выбранный пакет не может быть обновлен, поскольку некоторые из его приложений запущены.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Остановите эти приложения и повторите попытку.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="490" />
+      <location filename="../PipxWidget.py" line="501" />
       <source>&lt;p&gt;The packages cannot be upgraded because some of their apps are running.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Stop these apps and try again.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Обновление пакетов невозможно, поскольку некоторые из их приложений запущены.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Остановите эти приложения и повторите попытку.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="515" />
+      <location filename="../PipxWidget.py" line="526" />
       <source>Uninstall Package</source>
       <translation>Деинсталировать пакет</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="516" />
+      <location filename="../PipxWidget.py" line="527" />
       <source>&lt;p&gt;Shall the package &lt;b&gt;{0}&lt;/b&gt; really be uninstalled?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Действительно ли пакет &lt;b&gt;{0}&lt;/b&gt; должен быть удален?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="532" />
+      <location filename="../PipxWidget.py" line="543" />
       <source>&lt;p&gt;Do you really want to uninstall &lt;b&gt;ALL&lt;/b&gt; packages?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Вы действительно хотите удалить &lt;/b&gt;ВСЕ &lt;/b&gt; пакеты?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="642" />
+      <location filename="../PipxWidget.py" line="664" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation>&lt;b&gt;Версия pipx {0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="672" />
+      <location filename="../PipxWidget.py" line="694" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="680" />
+      <location filename="../PipxWidget.py" line="702" />
       <source>package and some dependencies outdated</source>
       <translation>пакет и некоторые зависимости устарели</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="683" />
+      <location filename="../PipxWidget.py" line="705" />
       <source>package outdated</source>
       <translation>пакет устарел</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="697" />
+      <location filename="../PipxWidget.py" line="719" />
       <source>some dependencies outdated</source>
       <translation>некоторые зависимости устарели</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="712" />
+      <location filename="../PipxWidget.py" line="734" />
       <source>everything up-to-date</source>
       <translation>все обновлено</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="739" />
+      <location filename="../PipxWidget.py" line="761" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="741" />
+      <location filename="../PipxWidget.py" line="763" />
       <source> (standalone)</source>
       <translation> (автономный)</translation>
     </message>
@@ -849,6 +864,11 @@
     </message>
     <message>
       <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to show a dialog with the outdated dependencies.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
       <source>Package/Application</source>
       <translation>Пакет/Приложение</translation>
     </message>
@@ -862,6 +882,10 @@
       <source>Installed With</source>
       <translation>Установлен с</translation>
     </message>
+    <message>
+      <source>Upgrade Dependencies</source>
+      <translation type="vanished">Обновить зависимости</translation>
+    </message>
   </context>
   <context>
     <name>PluginPipxInterface</name>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PipxInterface/icons/dependency-dark.svg	Tue Dec 10 17:50:48 2024 +0100
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   viewBox="0 0 22 22"
+   version="1.1"
+   id="svg6180"
+   sodipodi:docname="dependency-dark.svg"
+   inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview6182"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false"
+     inkscape:zoom="46.681818"
+     inkscape:cx="11.439143"
+     inkscape:cy="11.257059"
+     inkscape:window-width="1795"
+     inkscape:window-height="1284"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg6180" />
+  <defs
+     id="defs3051">
+    <style
+       type="text/css"
+       id="current-color-scheme">
+      .ColorScheme-Text {
+        color:#232629;
+      }
+      </style>
+  </defs>
+  <path
+     style="fill:#eff0f1;fill-opacity:1;stroke:none;stroke-width:1.195;stroke-dasharray:none"
+     d="m 5,1 -4,8.75 1.0223214,0.559083 2.40625,-5.2636729 V 9.75 H 5.5714286 V 5.0454101 L 7.9776789,10.309083 9,9.75 Z M 4.4285714,11 v 2.5 H 5.5714286 V 11 Z m 0,3.75 v 2.5 h 1.1428572 v -2.5 z m 0,3.75 V 21 h 1.1428572 v -2.5 z"
+     class="ColorScheme-Text"
+     id="path6178" />
+  <path
+     style="color:#232629;fill:#eff0f1;fill-opacity:1;stroke:none;stroke-width:1;stroke-dasharray:none"
+     d="M 15.466,1 C 13.54,1 11.718,1.5270024 10,2.5795899 l 0.855,2.2338866 c 0.859,-0.4793999 1.631,-0.8218484 2.318,-1.0302734 0.697,-0.2084125 1.406,-0.3125 2.129,-0.3125 1.085,0 1.918,0.2753118 2.497,0.8276368 0.579,0.5523375 0.868,1.3437507 0.868,2.3754882 0,0.5523375 -0.06,1.0382031 -0.189,1.4550782 -0.127,0.41685 -0.344,0.8331375 -0.651,1.25 -0.308,0.4168624 -0.955,1.1041887 -1.94,2.0629887 C 14.677,12.696058 13.411,14.92375 13.3,17.25 h 2.2 v -0.03906 c 0,-0.94835 0.144,-1.709514 0.433,-2.282714 0.299,-0.583613 0.895,-1.318753 1.79,-2.20459 1.094,-1.052588 1.823,-1.843975 2.185,-2.375488 0.371,-0.5315 0.646,-1.0929746 0.827,-1.6870122 C 20.916,8.0670983 21.006,7.383996 21.006,6.612796 21.006,4.841121 20.513,3.4639905 19.528,2.484378 18.536,1.494325 17.184,1 15.466,1 Z M 13.3,18.5 V 21 h 2.2 v -2.5 z"
+     class="ColorScheme-Text"
+     id="path10323" />
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PipxInterface/icons/dependency-light.svg	Tue Dec 10 17:50:48 2024 +0100
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   viewBox="0 0 22 22"
+   version="1.1"
+   id="svg6180"
+   sodipodi:docname="dependency-light.svg"
+   inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview6182"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false"
+     inkscape:zoom="46.681818"
+     inkscape:cx="11.439143"
+     inkscape:cy="11.257059"
+     inkscape:window-width="1795"
+     inkscape:window-height="1284"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg6180" />
+  <defs
+     id="defs3051">
+    <style
+       type="text/css"
+       id="current-color-scheme">
+      .ColorScheme-Text {
+        color:#232629;
+      }
+      </style>
+  </defs>
+  <path
+     style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.19522"
+     d="m 5,1 -4,8.75 1.0223214,0.559083 2.40625,-5.2636729 V 9.75 H 5.5714286 V 5.0454101 L 7.9776789,10.309083 9,9.75 Z M 4.4285714,11 v 2.5 H 5.5714286 V 11 Z m 0,3.75 v 2.5 h 1.1428572 v -2.5 z m 0,3.75 V 21 h 1.1428572 v -2.5 z"
+     class="ColorScheme-Text"
+     id="path6178" />
+  <path
+     style="color:#232629;fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1;stroke-dasharray:none"
+     d="M 15.466,1 C 13.54,1 11.718,1.5270024 10,2.5795899 l 0.855,2.2338866 c 0.859,-0.4793999 1.631,-0.8218484 2.318,-1.0302734 0.697,-0.2084125 1.406,-0.3125 2.129,-0.3125 1.085,0 1.918,0.2753118 2.497,0.8276368 0.579,0.5523375 0.868,1.3437507 0.868,2.3754882 0,0.5523375 -0.06,1.0382031 -0.189,1.4550782 -0.127,0.41685 -0.344,0.8331375 -0.651,1.25 -0.308,0.4168624 -0.955,1.1041887 -1.94,2.0629887 C 14.677,12.696058 13.411,14.92375 13.3,17.25 h 2.2 v -0.03906 c 0,-0.94835 0.144,-1.709514 0.433,-2.282714 0.299,-0.583613 0.895,-1.318753 1.79,-2.20459 1.094,-1.052588 1.823,-1.843975 2.185,-2.375488 0.371,-0.5315 0.646,-1.0929746 0.827,-1.6870122 C 20.916,8.0670983 21.006,7.383996 21.006,6.612796 21.006,4.841121 20.513,3.4639905 19.528,2.484378 18.536,1.494325 17.184,1 15.466,1 Z M 13.3,18.5 V 21 h 2.2 v -2.5 z"
+     class="ColorScheme-Text"
+     id="path10323" />
+</svg>
--- a/PluginPipxInterface.py	Tue Dec 10 17:43:42 2024 +0100
+++ b/PluginPipxInterface.py	Tue Dec 10 17:50:48 2024 +0100
@@ -36,7 +36,7 @@
     "author": "Detlev Offenbach <detlev@die-offenbachs.de>",
     "autoactivate": True,
     "deactivateable": True,
-    "version": "10.5.6",
+    "version": "10.6.0",
     "className": "PluginPipxInterface",
     "packageName": "PipxInterface",
     "shortDescription": "Graphical interface to the 'pipx' command.",
Binary file PluginPipxInterface.zip has changed
--- a/changelog.md	Tue Dec 10 17:43:42 2024 +0100
+++ b/changelog.md	Tue Dec 10 17:50:48 2024 +0100
@@ -1,6 +1,11 @@
 ChangeLog
 ---------
 
+__Version 10.6.0__
+
+- Added a shortcut button to show the outdated dependencies of the selected package.
+- Added the capability to upgrade just selected package dependencies.
+
 __Version 10.5.6__
 
 - bug fixes

eric ide

mercurial