Added the capability to perform a periodic check for outdated packages or packages with outdated dependencies. release-10.5.0

Tue, 17 Sep 2024 11:35:31 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 17 Sep 2024 11:35:31 +0200
changeset 83
d841c572a465
parent 82
417d6480e11e
child 84
0f2666415427

Added the capability to perform a periodic check for outdated packages or packages with outdated dependencies.

PipxInterface/ConfigurationPage/PipxPage.py file | annotate | diff | comparison | revisions
PipxInterface/ConfigurationPage/PipxPage.ui file | annotate | diff | comparison | revisions
PipxInterface/ConfigurationPage/Ui_PipxPage.py file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxProcess.html file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PluginPipxInterface.html file | annotate | diff | comparison | revisions
PipxInterface/Documentation/Source/index-Plugin_Pipx_Interface.PipxInterface.html file | annotate | diff | comparison | revisions
PipxInterface/Pipx.py file | annotate | diff | comparison | revisions
PipxInterface/PipxProcess.py file | annotate | diff | comparison | revisions
PipxInterface/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
PluginPipxInterface.py file | annotate | diff | comparison | revisions
PluginPipxInterface.zip file | annotate | diff | comparison | revisions
changelog.md file | annotate | diff | comparison | revisions
--- a/PipxInterface/ConfigurationPage/PipxPage.py	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/ConfigurationPage/PipxPage.py	Tue Sep 17 11:35:31 2024 +0200
@@ -43,6 +43,9 @@
         self.outdatedDependenciesCheckBox.setChecked(
             self.__plugin.getPreferences("IncludeOutdatedDependencies")
         )
+        self.periodicCheckOutdatedSpinBox.setValue(
+            self.__plugin.getPreferences("PeriodicOutdatedCheckInterval")
+        )
         self.recentWorkdirsSpinBox.setValue(
             self.__plugin.getPreferences("MaxRecentAppWorkdirs")
         )
@@ -58,5 +61,8 @@
             "IncludeOutdatedDependencies", self.outdatedDependenciesCheckBox.isChecked()
         )
         self.__plugin.setPreferences(
+            "PeriodicOutdatedCheckInterval", self.periodicCheckOutdatedSpinBox.value()
+        )
+        self.__plugin.setPreferences(
             "MaxRecentAppWorkdirs", self.recentWorkdirsSpinBox.value()
         )
--- a/PipxInterface/ConfigurationPage/PipxPage.ui	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/ConfigurationPage/PipxPage.ui	Tue Sep 17 11:35:31 2024 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>548</width>
-    <height>383</height>
+    <height>416</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
@@ -86,6 +86,55 @@
         </property>
        </widget>
       </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string>Periodic Check Interval:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="periodicCheckOutdatedSpinBox">
+          <property name="toolTip">
+           <string>&lt;p&gt;Enter the interval in hours for a periodic check for outdated packages (1 &amp;le; value &amp;le; 24; 0 = disabled).&lt;/p&gt;</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+          <property name="specialValueText">
+           <string>disabled</string>
+          </property>
+          <property name="showGroupSeparator" stdset="0">
+           <bool>true</bool>
+          </property>
+          <property name="suffix">
+           <string> hours</string>
+          </property>
+          <property name="maximum">
+           <number>24</number>
+          </property>
+          <property name="value">
+           <number>1</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
      </layout>
     </widget>
    </item>
@@ -153,6 +202,7 @@
   <tabstop>indexEdit</tabstop>
   <tabstop>autoCheckOutdatedCheckBox</tabstop>
   <tabstop>outdatedDependenciesCheckBox</tabstop>
+  <tabstop>periodicCheckOutdatedSpinBox</tabstop>
   <tabstop>recentWorkdirsSpinBox</tabstop>
  </tabstops>
  <resources/>
--- a/PipxInterface/ConfigurationPage/Ui_PipxPage.py	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/ConfigurationPage/Ui_PipxPage.py	Tue Sep 17 11:35:31 2024 +0200
@@ -12,7 +12,7 @@
 class Ui_PipxPage(object):
     def setupUi(self, PipxPage):
         PipxPage.setObjectName("PipxPage")
-        PipxPage.resize(548, 383)
+        PipxPage.resize(548, 416)
         self.verticalLayout_3 = QtWidgets.QVBoxLayout(PipxPage)
         self.verticalLayout_3.setObjectName("verticalLayout_3")
         self.headerLabel = QtWidgets.QLabel(parent=PipxPage)
@@ -48,6 +48,21 @@
         self.outdatedDependenciesCheckBox = QtWidgets.QCheckBox(parent=self.groupBox)
         self.outdatedDependenciesCheckBox.setObjectName("outdatedDependenciesCheckBox")
         self.verticalLayout_2.addWidget(self.outdatedDependenciesCheckBox)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.label_2 = QtWidgets.QLabel(parent=self.groupBox)
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout.addWidget(self.label_2)
+        self.periodicCheckOutdatedSpinBox = QtWidgets.QSpinBox(parent=self.groupBox)
+        self.periodicCheckOutdatedSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+        self.periodicCheckOutdatedSpinBox.setProperty("showGroupSeparator", True)
+        self.periodicCheckOutdatedSpinBox.setMaximum(24)
+        self.periodicCheckOutdatedSpinBox.setProperty("value", 1)
+        self.periodicCheckOutdatedSpinBox.setObjectName("periodicCheckOutdatedSpinBox")
+        self.horizontalLayout.addWidget(self.periodicCheckOutdatedSpinBox)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.verticalLayout_2.addLayout(self.horizontalLayout)
         self.verticalLayout_3.addWidget(self.groupBox)
         self.groupBox_7 = QtWidgets.QGroupBox(parent=PipxPage)
         self.groupBox_7.setObjectName("groupBox_7")
@@ -62,17 +77,18 @@
         self.recentWorkdirsSpinBox.setMaximum(50)
         self.recentWorkdirsSpinBox.setObjectName("recentWorkdirsSpinBox")
         self.hboxlayout.addWidget(self.recentWorkdirsSpinBox)
-        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
-        self.hboxlayout.addItem(spacerItem)
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.hboxlayout.addItem(spacerItem1)
         self.verticalLayout_3.addWidget(self.groupBox_7)
-        spacerItem1 = QtWidgets.QSpacerItem(20, 73, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
-        self.verticalLayout_3.addItem(spacerItem1)
+        spacerItem2 = QtWidgets.QSpacerItem(20, 73, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.verticalLayout_3.addItem(spacerItem2)
 
         self.retranslateUi(PipxPage)
         QtCore.QMetaObject.connectSlotsByName(PipxPage)
         PipxPage.setTabOrder(self.indexEdit, self.autoCheckOutdatedCheckBox)
         PipxPage.setTabOrder(self.autoCheckOutdatedCheckBox, self.outdatedDependenciesCheckBox)
-        PipxPage.setTabOrder(self.outdatedDependenciesCheckBox, self.recentWorkdirsSpinBox)
+        PipxPage.setTabOrder(self.outdatedDependenciesCheckBox, self.periodicCheckOutdatedSpinBox)
+        PipxPage.setTabOrder(self.periodicCheckOutdatedSpinBox, self.recentWorkdirsSpinBox)
 
     def retranslateUi(self, PipxPage):
         _translate = QtCore.QCoreApplication.translate
@@ -84,6 +100,10 @@
         self.autoCheckOutdatedCheckBox.setText(_translate("PipxPage", "Determine outdated packages automatically"))
         self.outdatedDependenciesCheckBox.setToolTip(_translate("PipxPage", "Select to determine packages with any outdated dependencies when determining outdated packages."))
         self.outdatedDependenciesCheckBox.setText(_translate("PipxPage", "Determine packages with outdated dependencies"))
+        self.label_2.setText(_translate("PipxPage", "Periodic Check Interval:"))
+        self.periodicCheckOutdatedSpinBox.setToolTip(_translate("PipxPage", "<p>Enter the interval in hours for a periodic check for outdated packages (1 &le; value &le; 24; 0 = disabled).</p>"))
+        self.periodicCheckOutdatedSpinBox.setSpecialValueText(_translate("PipxPage", "disabled"))
+        self.periodicCheckOutdatedSpinBox.setSuffix(_translate("PipxPage", " hours"))
         self.groupBox_7.setTitle(_translate("PipxPage", "Recent Application Working Directories"))
         self.label.setText(_translate("PipxPage", "Number of recent working directories:"))
         self.recentWorkdirsSpinBox.setToolTip(_translate("PipxPage", "Enter the number of recently used working directories  to remember"))
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html	Tue Sep 17 11:35:31 2024 +0200
@@ -169,6 +169,10 @@
 <td>Public method to reinstall the given package with given options.</td>
 </tr>
 <tr>
+<td><a href="#Pipx.shutdown">shutdown</a></td>
+<td>Public method to perform shutdown actions.</td>
+</tr>
+<tr>
 <td><a href="#Pipx.uninstallAllPackages">uninstallAllPackages</a></td>
 <td>Public method to uninstall all pipx managed packages.</td>
 </tr>
@@ -830,6 +834,13 @@
             on the system (defaults to False)
 </dd>
 </dl>
+<a NAME="Pipx.shutdown" ID="Pipx.shutdown"></a>
+<h4>Pipx.shutdown</h4>
+<b>shutdown</b>(<i></i>)
+<p>
+        Public method to perform shutdown actions.
+</p>
+
 <a NAME="Pipx.uninstallAllPackages" ID="Pipx.uninstallAllPackages"></a>
 <h4>Pipx.uninstallAllPackages</h4>
 <b>uninstallAllPackages</b>(<i></i>)
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxProcess.html	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxProcess.html	Tue Sep 17 11:35:31 2024 +0200
@@ -8,7 +8,7 @@
 <a NAME="top" ID="top"></a>
 <h1>Plugin_Pipx_Interface.PipxInterface.PipxProcess</h1>
 <p>
-Module implementing a QProcess derive class with a timeout and convenience signals.
+Module implementing a QProcess derived class with a timeout and convenience signals.
 </p>
 
 <h3>Global Attributes</h3>
@@ -20,7 +20,7 @@
 <table>
 <tr>
 <td><a href="#PipxProcess">PipxProcess</a></td>
-<td>Class implementing a QProcess derive class with a timeout and convenience signals succeeded and failed.</td>
+<td>Class implementing a QProcess derived class with a timeout and convenience signals succeeded and failed.</td>
 </tr>
 </table>
 
@@ -34,7 +34,7 @@
 <a NAME="PipxProcess" ID="PipxProcess"></a>
 <h2>PipxProcess</h2>
 <p>
-    Class implementing a QProcess derive class with a timeout and convenience signals
+    Class implementing a QProcess derived class with a timeout and convenience signals
     succeeded and failed.
 </p>
 
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html	Tue Sep 17 11:35:31 2024 +0200
@@ -162,6 +162,10 @@
 <td>Private method to determine the list of selected packages.</td>
 </tr>
 <tr>
+<td><a href="#PipxWidget.__setOutdatedCheckTimer">__setOutdatedCheckTimer</a></td>
+<td>Private slot to configure the periodic outdated packages check.</td>
+</tr>
+<tr>
 <td><a href="#PipxWidget.__showDependencies">__showDependencies</a></td>
 <td>Private slot to show a dialog with the dependencies of the selected package.</td>
 </tr>
@@ -217,6 +221,10 @@
 <td><a href="#PipxWidget.on_refreshButton_clicked">on_refreshButton_clicked</a></td>
 <td>Private slot to refresh the packages list.</td>
 </tr>
+<tr>
+<td><a href="#PipxWidget.shutdown">shutdown</a></td>
+<td>Public slot to perform shutdown actions.</td>
+</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -593,6 +601,13 @@
 list of str
 </dd>
 </dl>
+<a NAME="PipxWidget.__setOutdatedCheckTimer" ID="PipxWidget.__setOutdatedCheckTimer"></a>
+<h4>PipxWidget.__setOutdatedCheckTimer</h4>
+<b>__setOutdatedCheckTimer</b>(<i></i>)
+<p>
+        Private slot to configure the periodic outdated packages check.
+</p>
+
 <a NAME="PipxWidget.__showDependencies" ID="PipxWidget.__showDependencies"></a>
 <h4>PipxWidget.__showDependencies</h4>
 <b>__showDependencies</b>(<i></i>)
@@ -704,6 +719,13 @@
         Private slot to refresh the packages list.
 </p>
 
+<a NAME="PipxWidget.shutdown" ID="PipxWidget.shutdown"></a>
+<h4>PipxWidget.shutdown</h4>
+<b>shutdown</b>(<i></i>)
+<p>
+        Public slot to perform shutdown actions.
+</p>
+
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PluginPipxInterface.html	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PluginPipxInterface.html	Tue Sep 17 11:35:31 2024 +0200
@@ -59,6 +59,15 @@
     Class documentation goes here.
 </p>
 
+<h3>Signals</h3>
+<dl>
+
+<dt>preferencesChanged()</dt>
+<dd>
+emitted to signal a change of preferences. This
+        signal is simply relayed from the main UI.
+</dd>
+</dl>
 <h3>Derived from</h3>
 QObject
 <h3>Class Attributes</h3>
--- a/PipxInterface/Documentation/Source/index-Plugin_Pipx_Interface.PipxInterface.html	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/Documentation/Source/index-Plugin_Pipx_Interface.PipxInterface.html	Tue Sep 17 11:35:31 2024 +0200
@@ -49,7 +49,7 @@
 </tr>
 <tr>
 <td><a href="Plugin_Pipx_Interface.PipxInterface.PipxProcess.html">PipxProcess</a></td>
-<td>Module implementing a QProcess derive class with a timeout and convenience signals.</td>
+<td>Module implementing a QProcess derived class with a timeout and convenience signals.</td>
 </tr>
 <tr>
 <td><a href="Plugin_Pipx_Interface.PipxInterface.PipxReinstallDialog.html">PipxReinstallDialog</a></td>
--- a/PipxInterface/Pipx.py	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/Pipx.py	Tue Sep 17 11:35:31 2024 +0200
@@ -61,7 +61,6 @@
 
         self.__pipxProcesses.clear()
 
-
     ############################################################################
     ## Utility methods
     ############################################################################
--- a/PipxInterface/PipxProcess.py	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/PipxProcess.py	Tue Sep 17 11:35:31 2024 +0200
@@ -57,7 +57,7 @@
     def timeoutInterval(self):
         """
         Public method to get the process timeout interval.
-        
+
         @return process timeout interval in milliseconds
         @rtype int
         """
--- a/PipxInterface/PipxWidget.py	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/PipxWidget.py	Tue Sep 17 11:35:31 2024 +0200
@@ -97,6 +97,12 @@
 
         QTimer.singleShot(0, self.__populatePackages)
 
+        self.__outdatedCheckTimer = QTimer(self)
+        self.__outdatedCheckTimer.timeout.connect(self.__checkOutdatedPackages)
+
+        self.__plugin.preferencesChanged.connect(self.__setOutdatedCheckTimer)
+        QTimer.singleShot(10, self.__setOutdatedCheckTimer)
+
     @pyqtSlot()
     def shutdown(self):
         """
@@ -429,6 +435,23 @@
             self.__checkPackageOutdated(itm)
 
     @pyqtSlot()
+    def __setOutdatedCheckTimer(self):
+        """
+        Private slot to configure the periodic outdated packages check.
+        """
+        interval = self.__plugin.getPreferences("PeriodicOutdatedCheckInterval")
+        # interval is in hours
+        if interval:
+            self.__outdatedCheckTimer.setInterval(
+                interval * 3_600_000  # interval in ms
+            )
+            self.__outdatedCheckTimer.start()
+        else:
+            self.__outdatedCheckTimer.stop()
+
+        self.__plugin.setOutdatedIndicator(self.__hasOutdatedItems())
+
+    @pyqtSlot()
     def __upgradePackage(self):
         """
         Private slot to upgrade the selected package.
Binary file PipxInterface/i18n/pipx_de.qm has changed
--- a/PipxInterface/i18n/pipx_de.ts	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/i18n/pipx_de.ts	Tue Sep 17 11:35:31 2024 +0200
@@ -4,141 +4,141 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="263" />
-      <location filename="../Pipx.py" line="153" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Meldung: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="275" />
-      <location filename="../Pipx.py" line="267" />
-      <location filename="../Pipx.py" line="156" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;pipx wurde mit einem Fehler beendet ({0}).&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="165" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation>pipx endete nicht innerhalb 30 Sekunden.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
-      <location filename="../Pipx.py" line="167" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation>pipx konnte nicht gestarted werden.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation>pipx Startfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="226" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation>pipx Laufzeitfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="227" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der pipx Prozess meldete einen Fehler.&lt;/p&gt;&lt;p&gt;Fehler: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="247" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation>pipx endete nicht innerhalb {0} Sekunden.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="253" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation>pipx Zeitüberschreitungsfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation>pipx Ausführungsfehler</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="399" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation>Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="444" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation>Alle Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="494" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation>Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="525" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation>Alle Pakete neu installieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="538" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation>Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation>Alle Pakete deinstallieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="565" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation>Paket aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation>Alle Pakete aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation>Gemeinsame Bibliotheken aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="599" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation>Interpreter aktualisieren</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="612" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation>Ungenutzte Interpreter entfernen</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="623" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation>PATH-Änderungen sicherstellen</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="662" />
+      <location filename="../Pipx.py" line="673" />
       <source>Check Outdated Package</source>
       <translation>Prüfe veraltete Pakete</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="663" />
+      <location filename="../Pipx.py" line="674" />
       <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der Status des Paketes &lt;b&gt;{0}&lt;/b&gt; konnte nicht bestimmt werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="724" />
+      <location filename="../Pipx.py" line="735" />
       <source>Get Package Dependencies</source>
       <translation>Paketabhängigkeiten abrufen</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="725" />
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <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="795" />
+      <location filename="../Pipx.py" line="806" />
       <source>Upgrade Dependencies</source>
       <translation>Abhängigkeiten aktualisieren</translation>
     </message>
@@ -408,6 +408,26 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Periodic Check Interval:</source>
+      <translation>Intervall der regelmäßigen Überprüfung:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>&lt;p&gt;Enter the interval in hours for a periodic check for outdated packages (1 &amp;le; value &amp;le; 24; 0 = disabled).&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Geben Sie das Intervall in Stunden für die regelmäßige Prüfung auf veraltete Pakete ein (1 &amp;le; Wert &amp;le; 24; 0 = deaktiviert).&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>disabled</source>
+      <translation>deaktiviert</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source> hours</source>
+      <translation> Stunden</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
       <source>Recent Application Working Directories</source>
       <translation>Arbeitsverzeichnisse für Anwendungen</translation>
     </message>
@@ -546,229 +566,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="113" />
+      <location filename="../PipxWidget.py" line="126" />
       <source>Install</source>
       <translation>Installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="246" />
-      <location filename="../PipxWidget.py" line="115" />
+      <location filename="../PipxWidget.py" line="259" />
+      <location filename="../PipxWidget.py" line="128" />
       <source>Install Packages</source>
       <translation>Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="265" />
-      <location filename="../PipxWidget.py" line="118" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="131" />
       <source>Install All Packages</source>
       <translation>Alle Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="122" />
+      <location filename="../PipxWidget.py" line="135" />
       <source>Re-Install Selected Package</source>
       <translation>Ausgewähltes Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
-      <location filename="../PipxWidget.py" line="125" />
+      <location filename="../PipxWidget.py" line="376" />
+      <location filename="../PipxWidget.py" line="138" />
       <source>Re-Install All Packages</source>
       <translation>Alle Pakete neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="321" />
-      <location filename="../PipxWidget.py" line="312" />
-      <location filename="../PipxWidget.py" line="300" />
-      <location filename="../PipxWidget.py" line="284" />
-      <location filename="../PipxWidget.py" line="129" />
+      <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" />
       <source>Create Spec Metadata File</source>
       <translation>Erzeuge Spec-Metadaten-Datei</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="136" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Upgrade</source>
       <translation>Aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="151" />
       <source>Check Outdated Packages</source>
       <translation>Prüfe veraltete Pakete</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="434" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="464" />
+      <location filename="../PipxWidget.py" line="155" />
       <source>Upgrade Selected Package</source>
       <translation>Ausgewähltes Paket aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="459" />
-      <location filename="../PipxWidget.py" line="145" />
+      <location filename="../PipxWidget.py" line="489" />
+      <location filename="../PipxWidget.py" line="158" />
       <source>Upgrade All Packages</source>
       <translation>Alle Pakete aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Upgrade Shared Libraries</source>
       <translation>Gemeinsame Bibliotheken aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="156" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Uninstall</source>
       <translation>Deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="171" />
       <source>Uninstall Selected Package</source>
       <translation>Ausgewähltes Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
-      <location filename="../PipxWidget.py" line="161" />
+      <location filename="../PipxWidget.py" line="531" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Uninstall All Packages</source>
       <translation>Alle Pakete deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="168" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Dependencies</source>
       <translation>Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="170" />
+      <location filename="../PipxWidget.py" line="183" />
       <source>Show All Dependencies</source>
       <translation>Zeige Alle Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="186" />
       <source>Show Outdated Dependencies</source>
       <translation>Zeige Veraltete Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="176" />
+      <location filename="../PipxWidget.py" line="189" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Zeige Aktuelle Abhängigkeiten</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Upgrade Dependencies</source>
       <translation>Abhängigkeiten aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="199" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Standalone Interpreters</source>
       <translation>Eigenständige Interpreter</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="203" />
+      <location filename="../PipxWidget.py" line="216" />
       <source>Ensure PATH Modifications</source>
       <translation>PATH-Änderungen sicherstellen</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="206" />
+      <location filename="../PipxWidget.py" line="219" />
       <source>Configure...</source>
       <translation>Einstellungen...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="286" />
+      <location filename="../PipxWidget.py" line="299" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>JSON Dateien (*.json);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="287" />
+      <location filename="../PipxWidget.py" line="300" />
       <source>JSON Files (*.json)</source>
       <translation>JSON-Dateien (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="301" />
+      <location filename="../PipxWidget.py" line="314" />
       <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="313" />
+      <location filename="../PipxWidget.py" line="326" />
       <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="322" />
+      <location filename="../PipxWidget.py" line="335" />
       <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="338" />
+      <location filename="../PipxWidget.py" line="351" />
       <source>Re-Install Package</source>
       <translation>Paket neu installieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="339" />
+      <location filename="../PipxWidget.py" line="352" />
       <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="364" />
+      <location filename="../PipxWidget.py" line="377" />
       <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="435" />
+      <location filename="../PipxWidget.py" line="465" />
       <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="460" />
+      <location filename="../PipxWidget.py" line="490" />
       <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="485" />
+      <location filename="../PipxWidget.py" line="515" />
       <source>Uninstall Package</source>
       <translation>Paket deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="486" />
+      <location filename="../PipxWidget.py" line="516" />
       <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="502" />
+      <location filename="../PipxWidget.py" line="532" />
       <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="606" />
+      <location filename="../PipxWidget.py" line="636" />
       <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="636" />
+      <location filename="../PipxWidget.py" line="666" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="644" />
+      <location filename="../PipxWidget.py" line="674" />
       <source>package and some dependencies outdated</source>
       <translation>Paket und einige Abhängigkeiten veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="647" />
+      <location filename="../PipxWidget.py" line="677" />
       <source>package outdated</source>
       <translation>Paket veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="661" />
+      <location filename="../PipxWidget.py" line="691" />
       <source>some dependencies outdated</source>
       <translation>einige Abhängigkeiten veraltet</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="676" />
+      <location filename="../PipxWidget.py" line="706" />
       <source>everything up-to-date</source>
       <translation>alles aktuell</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="703" />
+      <location filename="../PipxWidget.py" line="733" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation>{0}{1}</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="735" />
       <source> (standalone)</source>
       <translation> (eigenständig)</translation>
     </message>
@@ -841,9 +861,9 @@
   <context>
     <name>PluginPipxInterface</name>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="190" />
-      <location filename="../../PluginPipxInterface.py" line="189" />
-      <location filename="../../PluginPipxInterface.py" line="185" />
+      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="196" />
+      <location filename="../../PluginPipxInterface.py" line="192" />
       <location filename="../../PluginPipxInterface.py" line="72" />
       <source>PyPI Application Management</source>
       <translation>PyPI Anwendungsmanagement</translation>
@@ -854,17 +874,17 @@
       <translation>Python Anwendungsmanagement</translation>
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="191" />
+      <location filename="../../PluginPipxInterface.py" line="198" />
       <source>Ctrl+Alt+Shift+A</source>
       <translation>Ctrl+Alt+Shift+A</translation>
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="204" />
       <source>Switch the input focus to the PyPI Application Management window.</source>
       <translation>Schalte den Eingabefokus auf die PyPI Anwendungsverwaltung um.</translation>
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="200" />
+      <location filename="../../PluginPipxInterface.py" line="207" />
       <source>&lt;b&gt;Activate PyPI Application Management&lt;/b&gt;&lt;p&gt;This switches the input focus to the PyPI Application Management window.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Aktiviere PyPI Anwendungsmanagement&lt;/b&gt;&lt;p&gt;Dies schaltet den Eingabefokus auf die PyPI Anwendungsverwaltung um.&lt;/p&gt;</translation>
     </message>
--- a/PipxInterface/i18n/pipx_empty.ts	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/i18n/pipx_empty.ts	Tue Sep 17 11:35:31 2024 +0200
@@ -4,141 +4,141 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="263" />
-      <location filename="../Pipx.py" line="153" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="275" />
-      <location filename="../Pipx.py" line="267" />
-      <location filename="../Pipx.py" line="156" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="165" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
-      <location filename="../Pipx.py" line="167" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="226" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="227" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="247" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="253" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="399" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="444" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="494" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="525" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="538" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="565" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="599" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="612" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="623" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="662" />
+      <location filename="../Pipx.py" line="673" />
       <source>Check Outdated Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="663" />
+      <location filename="../Pipx.py" line="674" />
       <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="724" />
+      <location filename="../Pipx.py" line="735" />
       <source>Get Package Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="725" />
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="795" />
+      <location filename="../Pipx.py" line="806" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
@@ -408,6 +408,26 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Periodic Check Interval:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>&lt;p&gt;Enter the interval in hours for a periodic check for outdated packages (1 &amp;le; value &amp;le; 24; 0 = disabled).&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>disabled</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source> hours</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
       <source>Recent Application Working Directories</source>
       <translation type="unfinished" />
     </message>
@@ -546,229 +566,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="113" />
+      <location filename="../PipxWidget.py" line="126" />
       <source>Install</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="246" />
-      <location filename="../PipxWidget.py" line="115" />
+      <location filename="../PipxWidget.py" line="259" />
+      <location filename="../PipxWidget.py" line="128" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="265" />
-      <location filename="../PipxWidget.py" line="118" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="131" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="122" />
+      <location filename="../PipxWidget.py" line="135" />
       <source>Re-Install Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
-      <location filename="../PipxWidget.py" line="125" />
+      <location filename="../PipxWidget.py" line="376" />
+      <location filename="../PipxWidget.py" line="138" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="321" />
-      <location filename="../PipxWidget.py" line="312" />
-      <location filename="../PipxWidget.py" line="300" />
-      <location filename="../PipxWidget.py" line="284" />
-      <location filename="../PipxWidget.py" line="129" />
+      <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" />
       <source>Create Spec Metadata File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="136" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Upgrade</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="151" />
       <source>Check Outdated Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="434" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="464" />
+      <location filename="../PipxWidget.py" line="155" />
       <source>Upgrade Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="459" />
-      <location filename="../PipxWidget.py" line="145" />
+      <location filename="../PipxWidget.py" line="489" />
+      <location filename="../PipxWidget.py" line="158" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="156" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Uninstall</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="171" />
       <source>Uninstall Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
-      <location filename="../PipxWidget.py" line="161" />
+      <location filename="../PipxWidget.py" line="531" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="168" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="170" />
+      <location filename="../PipxWidget.py" line="183" />
       <source>Show All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="186" />
       <source>Show Outdated Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="176" />
+      <location filename="../PipxWidget.py" line="189" />
       <source>Show Up-to-date Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="199" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Standalone Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="203" />
+      <location filename="../PipxWidget.py" line="216" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="206" />
+      <location filename="../PipxWidget.py" line="219" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="286" />
+      <location filename="../PipxWidget.py" line="299" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="287" />
+      <location filename="../PipxWidget.py" line="300" />
       <source>JSON Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="301" />
+      <location filename="../PipxWidget.py" line="314" />
       <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="313" />
+      <location filename="../PipxWidget.py" line="326" />
       <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="322" />
+      <location filename="../PipxWidget.py" line="335" />
       <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="338" />
+      <location filename="../PipxWidget.py" line="351" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="339" />
+      <location filename="../PipxWidget.py" line="352" />
       <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="364" />
+      <location filename="../PipxWidget.py" line="377" />
       <source>Do you really want to reinstall all packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="435" />
+      <location filename="../PipxWidget.py" line="465" />
       <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="460" />
+      <location filename="../PipxWidget.py" line="490" />
       <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="485" />
+      <location filename="../PipxWidget.py" line="515" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="486" />
+      <location filename="../PipxWidget.py" line="516" />
       <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="502" />
+      <location filename="../PipxWidget.py" line="532" />
       <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="606" />
+      <location filename="../PipxWidget.py" line="636" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="636" />
+      <location filename="../PipxWidget.py" line="666" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="644" />
+      <location filename="../PipxWidget.py" line="674" />
       <source>package and some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="647" />
+      <location filename="../PipxWidget.py" line="677" />
       <source>package outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="661" />
+      <location filename="../PipxWidget.py" line="691" />
       <source>some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="676" />
+      <location filename="../PipxWidget.py" line="706" />
       <source>everything up-to-date</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="703" />
+      <location filename="../PipxWidget.py" line="733" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="735" />
       <source> (standalone)</source>
       <translation type="unfinished" />
     </message>
@@ -841,9 +861,9 @@
   <context>
     <name>PluginPipxInterface</name>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="190" />
-      <location filename="../../PluginPipxInterface.py" line="189" />
-      <location filename="../../PluginPipxInterface.py" line="185" />
+      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="196" />
+      <location filename="../../PluginPipxInterface.py" line="192" />
       <location filename="../../PluginPipxInterface.py" line="72" />
       <source>PyPI Application Management</source>
       <translation type="unfinished" />
@@ -854,17 +874,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="191" />
+      <location filename="../../PluginPipxInterface.py" line="198" />
       <source>Ctrl+Alt+Shift+A</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="204" />
       <source>Switch the input focus to the PyPI Application Management window.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="200" />
+      <location filename="../../PluginPipxInterface.py" line="207" />
       <source>&lt;b&gt;Activate PyPI Application Management&lt;/b&gt;&lt;p&gt;This switches the input focus to the PyPI Application Management window.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/PipxInterface/i18n/pipx_en.ts	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/i18n/pipx_en.ts	Tue Sep 17 11:35:31 2024 +0200
@@ -4,141 +4,141 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="263" />
-      <location filename="../Pipx.py" line="153" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="275" />
-      <location filename="../Pipx.py" line="267" />
-      <location filename="../Pipx.py" line="156" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="165" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
-      <location filename="../Pipx.py" line="167" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="226" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="227" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="247" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="253" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="399" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="444" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="494" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="525" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="538" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="565" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="599" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="612" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="623" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="662" />
+      <location filename="../Pipx.py" line="673" />
       <source>Check Outdated Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="663" />
+      <location filename="../Pipx.py" line="674" />
       <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="724" />
+      <location filename="../Pipx.py" line="735" />
       <source>Get Package Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="725" />
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="795" />
+      <location filename="../Pipx.py" line="806" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
@@ -408,6 +408,26 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Periodic Check Interval:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>&lt;p&gt;Enter the interval in hours for a periodic check for outdated packages (1 &amp;le; value &amp;le; 24; 0 = disabled).&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>disabled</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source> hours</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
       <source>Recent Application Working Directories</source>
       <translation type="unfinished" />
     </message>
@@ -546,229 +566,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="113" />
+      <location filename="../PipxWidget.py" line="126" />
       <source>Install</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="246" />
-      <location filename="../PipxWidget.py" line="115" />
+      <location filename="../PipxWidget.py" line="259" />
+      <location filename="../PipxWidget.py" line="128" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="265" />
-      <location filename="../PipxWidget.py" line="118" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="131" />
       <source>Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="122" />
+      <location filename="../PipxWidget.py" line="135" />
       <source>Re-Install Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
-      <location filename="../PipxWidget.py" line="125" />
+      <location filename="../PipxWidget.py" line="376" />
+      <location filename="../PipxWidget.py" line="138" />
       <source>Re-Install All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="321" />
-      <location filename="../PipxWidget.py" line="312" />
-      <location filename="../PipxWidget.py" line="300" />
-      <location filename="../PipxWidget.py" line="284" />
-      <location filename="../PipxWidget.py" line="129" />
+      <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" />
       <source>Create Spec Metadata File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="136" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Upgrade</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="151" />
       <source>Check Outdated Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="434" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="464" />
+      <location filename="../PipxWidget.py" line="155" />
       <source>Upgrade Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="459" />
-      <location filename="../PipxWidget.py" line="145" />
+      <location filename="../PipxWidget.py" line="489" />
+      <location filename="../PipxWidget.py" line="158" />
       <source>Upgrade All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Upgrade Shared Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="156" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Uninstall</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="171" />
       <source>Uninstall Selected Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
-      <location filename="../PipxWidget.py" line="161" />
+      <location filename="../PipxWidget.py" line="531" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Uninstall All Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="168" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="170" />
+      <location filename="../PipxWidget.py" line="183" />
       <source>Show All Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="186" />
       <source>Show Outdated Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="176" />
+      <location filename="../PipxWidget.py" line="189" />
       <source>Show Up-to-date Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Upgrade Dependencies</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="199" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Standalone Interpreters</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="203" />
+      <location filename="../PipxWidget.py" line="216" />
       <source>Ensure PATH Modifications</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="206" />
+      <location filename="../PipxWidget.py" line="219" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="286" />
+      <location filename="../PipxWidget.py" line="299" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="287" />
+      <location filename="../PipxWidget.py" line="300" />
       <source>JSON Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="301" />
+      <location filename="../PipxWidget.py" line="314" />
       <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="313" />
+      <location filename="../PipxWidget.py" line="326" />
       <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="322" />
+      <location filename="../PipxWidget.py" line="335" />
       <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="338" />
+      <location filename="../PipxWidget.py" line="351" />
       <source>Re-Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="339" />
+      <location filename="../PipxWidget.py" line="352" />
       <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="364" />
+      <location filename="../PipxWidget.py" line="377" />
       <source>Do you really want to reinstall all packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="435" />
+      <location filename="../PipxWidget.py" line="465" />
       <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="460" />
+      <location filename="../PipxWidget.py" line="490" />
       <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="485" />
+      <location filename="../PipxWidget.py" line="515" />
       <source>Uninstall Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="486" />
+      <location filename="../PipxWidget.py" line="516" />
       <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="502" />
+      <location filename="../PipxWidget.py" line="532" />
       <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="606" />
+      <location filename="../PipxWidget.py" line="636" />
       <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="636" />
+      <location filename="../PipxWidget.py" line="666" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="644" />
+      <location filename="../PipxWidget.py" line="674" />
       <source>package and some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="647" />
+      <location filename="../PipxWidget.py" line="677" />
       <source>package outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="661" />
+      <location filename="../PipxWidget.py" line="691" />
       <source>some dependencies outdated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="676" />
+      <location filename="../PipxWidget.py" line="706" />
       <source>everything up-to-date</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="703" />
+      <location filename="../PipxWidget.py" line="733" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="735" />
       <source> (standalone)</source>
       <translation type="unfinished" />
     </message>
@@ -841,9 +861,9 @@
   <context>
     <name>PluginPipxInterface</name>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="190" />
-      <location filename="../../PluginPipxInterface.py" line="189" />
-      <location filename="../../PluginPipxInterface.py" line="185" />
+      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="196" />
+      <location filename="../../PluginPipxInterface.py" line="192" />
       <location filename="../../PluginPipxInterface.py" line="72" />
       <source>PyPI Application Management</source>
       <translation type="unfinished" />
@@ -854,17 +874,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="191" />
+      <location filename="../../PluginPipxInterface.py" line="198" />
       <source>Ctrl+Alt+Shift+A</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="204" />
       <source>Switch the input focus to the PyPI Application Management window.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="200" />
+      <location filename="../../PluginPipxInterface.py" line="207" />
       <source>&lt;b&gt;Activate PyPI Application Management&lt;/b&gt;&lt;p&gt;This switches the input focus to the PyPI Application Management window.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/PipxInterface/i18n/pipx_es.ts	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/i18n/pipx_es.ts	Tue Sep 17 11:35:31 2024 +0200
@@ -4,141 +4,141 @@
   <context>
     <name>Pipx</name>
     <message>
-      <location filename="../Pipx.py" line="263" />
-      <location filename="../Pipx.py" line="153" />
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
       <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Mensaje: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="275" />
-      <location filename="../Pipx.py" line="267" />
-      <location filename="../Pipx.py" line="156" />
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
       <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
       <translation>&lt;p&gt;pipx ha terminado con un error ({0}).&lt;/p&gt;{1}</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="165" />
+      <location filename="../Pipx.py" line="176" />
       <source>pipx did not finish within 30 seconds.</source>
       <translation>pipx no ha terminado antes de 30 segundos.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
-      <location filename="../Pipx.py" line="167" />
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
       <source>pipx could not be started.</source>
       <translation>pipx no se ha podido iniciar.</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="221" />
+      <location filename="../Pipx.py" line="232" />
       <source>pipx Start Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="226" />
+      <location filename="../Pipx.py" line="237" />
       <source>pipx Runtime Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="227" />
+      <location filename="../Pipx.py" line="238" />
       <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="247" />
+      <location filename="../Pipx.py" line="258" />
       <source>pipx did not finish within {0} seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="253" />
+      <location filename="../Pipx.py" line="264" />
       <source>pipx Timeout Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="285" />
       <source>pipx Execution Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Pipx.py" line="399" />
+      <location filename="../Pipx.py" line="410" />
       <source>Install Packages</source>
       <translation>Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="444" />
+      <location filename="../Pipx.py" line="455" />
       <source>Install All Packages</source>
       <translation>Instalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="494" />
+      <location filename="../Pipx.py" line="505" />
       <source>Re-Install Package</source>
       <translation>Reinstalar Package</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="525" />
+      <location filename="../Pipx.py" line="536" />
       <source>Re-Install All Packages</source>
       <translation>Reinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="538" />
+      <location filename="../Pipx.py" line="549" />
       <source>Uninstall Package</source>
       <translation>Desinstalar Package</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="548" />
+      <location filename="../Pipx.py" line="559" />
       <source>Uninstall All Packages</source>
       <translation>Desinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="565" />
+      <location filename="../Pipx.py" line="576" />
       <source>Upgrade Package</source>
       <translation>Actualizar Package</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="575" />
+      <location filename="../Pipx.py" line="586" />
       <source>Upgrade All Packages</source>
       <translation>Actualizar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="585" />
+      <location filename="../Pipx.py" line="596" />
       <source>Upgrade Shared Libraries</source>
       <translation>Actualizar Bibliotecas Compartidas</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="599" />
+      <location filename="../Pipx.py" line="610" />
       <source>Upgrade Interpreters</source>
       <translation>Actualizar Intérpretes</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="612" />
+      <location filename="../Pipx.py" line="623" />
       <source>Prune Unused Interpreters</source>
       <translation>Limpiar Intérpretes no Utililizados</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="623" />
+      <location filename="../Pipx.py" line="634" />
       <source>Ensure PATH Modifications</source>
       <translation>Asegurar modificaciones de PATH</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="662" />
+      <location filename="../Pipx.py" line="673" />
       <source>Check Outdated Package</source>
       <translation>Comprobar Package Desactualizado</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="663" />
+      <location filename="../Pipx.py" line="674" />
       <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El status del package &lt;b&gt;{0}&lt;/b&gt; no se ha podido determinar.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="724" />
+      <location filename="../Pipx.py" line="735" />
       <source>Get Package Dependencies</source>
       <translation>Obtener Dependencias del PAckage</translation>
     </message>
     <message>
-      <location filename="../Pipx.py" line="725" />
+      <location filename="../Pipx.py" line="736" />
       <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <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="795" />
+      <location filename="../Pipx.py" line="806" />
       <source>Upgrade Dependencies</source>
       <translation>Actualizar Dependencias</translation>
     </message>
@@ -408,6 +408,26 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Periodic Check Interval:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>&lt;p&gt;Enter the interval in hours for a periodic check for outdated packages (1 &amp;le; value &amp;le; 24; 0 = disabled).&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>disabled</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source> hours</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
       <source>Recent Application Working Directories</source>
       <translation>Directorios de Trabajo de Aplicación Recientes</translation>
     </message>
@@ -546,229 +566,229 @@
   <context>
     <name>PipxWidget</name>
     <message>
-      <location filename="../PipxWidget.py" line="113" />
+      <location filename="../PipxWidget.py" line="126" />
       <source>Install</source>
       <translation>Instalar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="246" />
-      <location filename="../PipxWidget.py" line="115" />
+      <location filename="../PipxWidget.py" line="259" />
+      <location filename="../PipxWidget.py" line="128" />
       <source>Install Packages</source>
       <translation>Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="265" />
-      <location filename="../PipxWidget.py" line="118" />
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="131" />
       <source>Install All Packages</source>
       <translation>Instalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="122" />
+      <location filename="../PipxWidget.py" line="135" />
       <source>Re-Install Selected Package</source>
       <translation>Reinstalar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="363" />
-      <location filename="../PipxWidget.py" line="125" />
+      <location filename="../PipxWidget.py" line="376" />
+      <location filename="../PipxWidget.py" line="138" />
       <source>Re-Install All Packages</source>
       <translation>Reinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="321" />
-      <location filename="../PipxWidget.py" line="312" />
-      <location filename="../PipxWidget.py" line="300" />
-      <location filename="../PipxWidget.py" line="284" />
-      <location filename="../PipxWidget.py" line="129" />
+      <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" />
       <source>Create Spec Metadata File</source>
       <translation>Crear Archivo de Metadatos de Spec</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="136" />
+      <location filename="../PipxWidget.py" line="149" />
       <source>Upgrade</source>
       <translation>Actualizar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="138" />
+      <location filename="../PipxWidget.py" line="151" />
       <source>Check Outdated Packages</source>
       <translation>Comprobar Packages Desactualizados</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="434" />
-      <location filename="../PipxWidget.py" line="142" />
+      <location filename="../PipxWidget.py" line="464" />
+      <location filename="../PipxWidget.py" line="155" />
       <source>Upgrade Selected Package</source>
       <translation>Actualizar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="459" />
-      <location filename="../PipxWidget.py" line="145" />
+      <location filename="../PipxWidget.py" line="489" />
+      <location filename="../PipxWidget.py" line="158" />
       <source>Upgrade All Packages</source>
       <translation>Actualizar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="149" />
+      <location filename="../PipxWidget.py" line="162" />
       <source>Upgrade Shared Libraries</source>
       <translation>Actualizar Bibliotecas Compartidas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="156" />
+      <location filename="../PipxWidget.py" line="169" />
       <source>Uninstall</source>
       <translation>Desinstalar</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="158" />
+      <location filename="../PipxWidget.py" line="171" />
       <source>Uninstall Selected Package</source>
       <translation>Desinstalar Package Seleccionado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="501" />
-      <location filename="../PipxWidget.py" line="161" />
+      <location filename="../PipxWidget.py" line="531" />
+      <location filename="../PipxWidget.py" line="174" />
       <source>Uninstall All Packages</source>
       <translation>Desinstalar Todos los Packages</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="168" />
+      <location filename="../PipxWidget.py" line="181" />
       <source>Dependencies</source>
       <translation>Dependencias</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="170" />
+      <location filename="../PipxWidget.py" line="183" />
       <source>Show All Dependencies</source>
       <translation>Mostrar Todas las Dependencias</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="173" />
+      <location filename="../PipxWidget.py" line="186" />
       <source>Show Outdated Dependencies</source>
       <translation>Mostrar Dependencias Desactualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="176" />
+      <location filename="../PipxWidget.py" line="189" />
       <source>Show Up-to-date Dependencies</source>
       <translation>Mostrar Dependencias Actualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="180" />
+      <location filename="../PipxWidget.py" line="193" />
       <source>Upgrade Dependencies</source>
       <translation>Actualizar Dependencias</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="199" />
+      <location filename="../PipxWidget.py" line="212" />
       <source>Standalone Interpreters</source>
       <translation>Intérpretes Independientes</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="203" />
+      <location filename="../PipxWidget.py" line="216" />
       <source>Ensure PATH Modifications</source>
       <translation>Asegurar modificaciones de PATH</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="206" />
+      <location filename="../PipxWidget.py" line="219" />
       <source>Configure...</source>
       <translation>Configurar...</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="286" />
+      <location filename="../PipxWidget.py" line="299" />
       <source>JSON Files (*.json);;All Files (*)</source>
       <translation>Archivos JSON (*.json);;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="287" />
+      <location filename="../PipxWidget.py" line="300" />
       <source>JSON Files (*.json)</source>
       <translation>Archivos JSON (*.json)</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="301" />
+      <location filename="../PipxWidget.py" line="314" />
       <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="313" />
+      <location filename="../PipxWidget.py" line="326" />
       <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="322" />
+      <location filename="../PipxWidget.py" line="335" />
       <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="338" />
+      <location filename="../PipxWidget.py" line="351" />
       <source>Re-Install Package</source>
       <translation>Reinstalar Package</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="339" />
+      <location filename="../PipxWidget.py" line="352" />
       <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="364" />
+      <location filename="../PipxWidget.py" line="377" />
       <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="435" />
+      <location filename="../PipxWidget.py" line="465" />
       <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="460" />
+      <location filename="../PipxWidget.py" line="490" />
       <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="485" />
+      <location filename="../PipxWidget.py" line="515" />
       <source>Uninstall Package</source>
       <translation>Desinstalar Package</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="486" />
+      <location filename="../PipxWidget.py" line="516" />
       <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="502" />
+      <location filename="../PipxWidget.py" line="532" />
       <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="606" />
+      <location filename="../PipxWidget.py" line="636" />
       <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="636" />
+      <location filename="../PipxWidget.py" line="666" />
       <source>{0} ({1})</source>
       <comment>current version, latest version</comment>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="644" />
+      <location filename="../PipxWidget.py" line="674" />
       <source>package and some dependencies outdated</source>
       <translation>package y algunas dependencias desactualizados</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="647" />
+      <location filename="../PipxWidget.py" line="677" />
       <source>package outdated</source>
       <translation>package desactualizado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="661" />
+      <location filename="../PipxWidget.py" line="691" />
       <source>some dependencies outdated</source>
       <translation>algunas dependencias desactualizadas</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="676" />
+      <location filename="../PipxWidget.py" line="706" />
       <source>everything up-to-date</source>
       <translation>todo actualizado</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="703" />
+      <location filename="../PipxWidget.py" line="733" />
       <source>{0}{1}</source>
       <comment>Python version, standalone indicator</comment>
       <translation>{0}{1}</translation>
     </message>
     <message>
-      <location filename="../PipxWidget.py" line="705" />
+      <location filename="../PipxWidget.py" line="735" />
       <source> (standalone)</source>
       <translation> (independiente)</translation>
     </message>
@@ -841,9 +861,9 @@
   <context>
     <name>PluginPipxInterface</name>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="190" />
-      <location filename="../../PluginPipxInterface.py" line="189" />
-      <location filename="../../PluginPipxInterface.py" line="185" />
+      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="196" />
+      <location filename="../../PluginPipxInterface.py" line="192" />
       <location filename="../../PluginPipxInterface.py" line="72" />
       <source>PyPI Application Management</source>
       <translation>Gestión de Aplicación PyPI</translation>
@@ -854,17 +874,17 @@
       <translation>Gestión de Aplicación Python</translation>
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="191" />
+      <location filename="../../PluginPipxInterface.py" line="198" />
       <source>Ctrl+Alt+Shift+A</source>
       <translation>Ctrl+Alt+Shift+A</translation>
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="204" />
       <source>Switch the input focus to the PyPI Application Management window.</source>
       <translation>Cambiar el foco de entrada a la ventana de Gestión de Aplicación PyPI.</translation>
     </message>
     <message>
-      <location filename="../../PluginPipxInterface.py" line="200" />
+      <location filename="../../PluginPipxInterface.py" line="207" />
       <source>&lt;b&gt;Activate PyPI Application Management&lt;/b&gt;&lt;p&gt;This switches the input focus to the PyPI Application Management window.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Activar Gestión de Aplicación PyPI&lt;/b&gt;&lt;p&gt;Esto cambia el foco de entrada a la ventana de Gestión de Aplicación PyPI.&lt;/p&gt;</translation>
     </message>
--- a/PipxInterface/i18n/pipx_ru.ts	Tue Sep 17 11:04:00 2024 +0200
+++ b/PipxInterface/i18n/pipx_ru.ts	Tue Sep 17 11:35:31 2024 +0200
@@ -1,872 +1,892 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
 <TS version="2.1" language="ru_RU">
-<context>
+  <context>
     <name>Pipx</name>
     <message>
-        <location filename="../Pipx.py" line="263"/>
-        <location filename="../Pipx.py" line="153"/>
-        <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
-        <translation>&lt;p&gt;Сообщение: {0}&lt;/p&gt;</translation>
+      <location filename="../Pipx.py" line="274" />
+      <location filename="../Pipx.py" line="164" />
+      <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Сообщение: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="275"/>
-        <location filename="../Pipx.py" line="267"/>
-        <location filename="../Pipx.py" line="156"/>
-        <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
-        <translation>&lt;p&gt;pipx завершился с ошибкой ({0}).&lt;/p&gt;{1}</translation>
+      <location filename="../Pipx.py" line="286" />
+      <location filename="../Pipx.py" line="278" />
+      <location filename="../Pipx.py" line="167" />
+      <source>&lt;p&gt;pipx exited with an error ({0}).&lt;/p&gt;{1}</source>
+      <translation>&lt;p&gt;pipx завершился с ошибкой ({0}).&lt;/p&gt;{1}</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="165"/>
-        <source>pipx did not finish within 30 seconds.</source>
-        <translation>pipx не была завершена в течение 30 секунд.</translation>
+      <location filename="../Pipx.py" line="176" />
+      <source>pipx did not finish within 30 seconds.</source>
+      <translation>pipx не была завершена в течение 30 секунд.</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="221"/>
-        <location filename="../Pipx.py" line="167"/>
-        <source>pipx could not be started.</source>
-        <translation>pipx не удалось запустить.</translation>
+      <location filename="../Pipx.py" line="232" />
+      <location filename="../Pipx.py" line="178" />
+      <source>pipx could not be started.</source>
+      <translation>pipx не удалось запустить.</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="221"/>
-        <source>pipx Start Error</source>
-        <translation type="unfinished"></translation>
+      <location filename="../Pipx.py" line="232" />
+      <source>pipx Start Error</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../Pipx.py" line="226"/>
-        <source>pipx Runtime Error</source>
-        <translation type="unfinished"></translation>
+      <location filename="../Pipx.py" line="237" />
+      <source>pipx Runtime Error</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../Pipx.py" line="227"/>
-        <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+      <location filename="../Pipx.py" line="238" />
+      <source>&lt;p&gt;The pipx process reported an error.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../Pipx.py" line="247"/>
-        <source>pipx did not finish within {0} seconds.</source>
-        <translation type="unfinished"></translation>
+      <location filename="../Pipx.py" line="258" />
+      <source>pipx did not finish within {0} seconds.</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../Pipx.py" line="253"/>
-        <source>pipx Timeout Error</source>
-        <translation type="unfinished"></translation>
+      <location filename="../Pipx.py" line="264" />
+      <source>pipx Timeout Error</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../Pipx.py" line="274"/>
-        <source>pipx Execution Error</source>
-        <translation type="unfinished"></translation>
+      <location filename="../Pipx.py" line="285" />
+      <source>pipx Execution Error</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../Pipx.py" line="399"/>
-        <source>Install Packages</source>
-        <translation>Установить пакеты</translation>
+      <location filename="../Pipx.py" line="410" />
+      <source>Install Packages</source>
+      <translation>Установить пакеты</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="444"/>
-        <source>Install All Packages</source>
-        <translation>Установить все пакеты</translation>
+      <location filename="../Pipx.py" line="455" />
+      <source>Install All Packages</source>
+      <translation>Установить все пакеты</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="494"/>
-        <source>Re-Install Package</source>
-        <translation>Переустановить пакет</translation>
+      <location filename="../Pipx.py" line="505" />
+      <source>Re-Install Package</source>
+      <translation>Переустановить пакет</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="525"/>
-        <source>Re-Install All Packages</source>
-        <translation>Переустановить все пакеты</translation>
+      <location filename="../Pipx.py" line="536" />
+      <source>Re-Install All Packages</source>
+      <translation>Переустановить все пакеты</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="538"/>
-        <source>Uninstall Package</source>
-        <translation>Деинсталировать пакет</translation>
+      <location filename="../Pipx.py" line="549" />
+      <source>Uninstall Package</source>
+      <translation>Деинсталировать пакет</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="548"/>
-        <source>Uninstall All Packages</source>
-        <translation>Деинсталировать все пакеты</translation>
+      <location filename="../Pipx.py" line="559" />
+      <source>Uninstall All Packages</source>
+      <translation>Деинсталировать все пакеты</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="565"/>
-        <source>Upgrade Package</source>
-        <translation>Обновить пакет</translation>
+      <location filename="../Pipx.py" line="576" />
+      <source>Upgrade Package</source>
+      <translation>Обновить пакет</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="575"/>
-        <source>Upgrade All Packages</source>
-        <translation>Обновить все пакеты</translation>
+      <location filename="../Pipx.py" line="586" />
+      <source>Upgrade All Packages</source>
+      <translation>Обновить все пакеты</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="585"/>
-        <source>Upgrade Shared Libraries</source>
-        <translation>Обновить общие библиотеки</translation>
+      <location filename="../Pipx.py" line="596" />
+      <source>Upgrade Shared Libraries</source>
+      <translation>Обновить общие библиотеки</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="599"/>
-        <source>Upgrade Interpreters</source>
-        <translation>Обновить интерпретаторы</translation>
+      <location filename="../Pipx.py" line="610" />
+      <source>Upgrade Interpreters</source>
+      <translation>Обновить интерпретаторы</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="612"/>
-        <source>Prune Unused Interpreters</source>
-        <translation>Удалить неиспользуемые интерпретаторы</translation>
+      <location filename="../Pipx.py" line="623" />
+      <source>Prune Unused Interpreters</source>
+      <translation>Удалить неиспользуемые интерпретаторы</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="623"/>
-        <source>Ensure PATH Modifications</source>
-        <translation>Внести изменения в переменную PATH</translation>
+      <location filename="../Pipx.py" line="634" />
+      <source>Ensure PATH Modifications</source>
+      <translation>Внести изменения в переменную PATH</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="662"/>
-        <source>Check Outdated Package</source>
-        <translation>Проверить устаревшие пакеты</translation>
+      <location filename="../Pipx.py" line="673" />
+      <source>Check Outdated Package</source>
+      <translation>Проверить устаревшие пакеты</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="663"/>
-        <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&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>
+      <location filename="../Pipx.py" line="674" />
+      <source>&lt;p&gt;The status of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&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="../Pipx.py" line="724"/>
-        <source>Get Package Dependencies</source>
-        <translation>Получение зависимостей пакетов</translation>
+      <location filename="../Pipx.py" line="735" />
+      <source>Get Package Dependencies</source>
+      <translation>Получение зависимостей пакетов</translation>
     </message>
     <message>
-        <location filename="../Pipx.py" line="725"/>
-        <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&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>
+      <location filename="../Pipx.py" line="736" />
+      <source>&lt;p&gt;The status of dependencies of package &lt;b&gt;{0}&lt;/b&gt; could not be determined.&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="../Pipx.py" line="795"/>
-        <source>Upgrade Dependencies</source>
-        <translation>Обновление зависимостей</translation>
+      <location filename="../Pipx.py" line="806" />
+      <source>Upgrade Dependencies</source>
+      <translation>Обновление зависимостей</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>PipxAppStartDialog</name>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Execution Parameters</source>
-        <translation>Параметры выполнения</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Execution Parameters</source>
+      <translation>Параметры выполнения</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Command Line Parameters:</source>
-        <translation>Параметры командной строки:</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Command Line Parameters:</source>
+      <translation>Параметры командной строки:</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Enter the command line parameters for the application.</source>
-        <translation>Введите параметры командной строки для приложения.</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Enter the command line parameters for the application.</source>
+      <translation>Введите параметры командной строки для приложения.</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Working Directory:</source>
-        <translation>Рабочая директория:</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Working Directory:</source>
+      <translation>Рабочая директория:</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Enter the working directory for the application run.</source>
-        <translation>Задайте рабочую директорию для запуска приложения.</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Enter the working directory for the application run.</source>
+      <translation>Задайте рабочую директорию для запуска приложения.</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Press to execute the application with the entered parameters.</source>
-        <translation>Запустить приложение с введенными параметрами.</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Press to execute the application with the entered parameters.</source>
+      <translation>Запустить приложение с введенными параметрами.</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Output</source>
-        <translation>Вывод</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Output</source>
+      <translation>Вывод</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.ui" line="0"/>
-        <source>Errors</source>
-        <translation>Ошибки</translation>
+      <location filename="../PipxAppStartDialog.ui" line="0" />
+      <source>Errors</source>
+      <translation>Ошибки</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.py" line="157"/>
-        <source>Process Generation Error</source>
-        <translation>Ошибка при запуске процесса</translation>
+      <location filename="../PipxAppStartDialog.py" line="157" />
+      <source>Process Generation Error</source>
+      <translation>Ошибка при запуске процесса</translation>
     </message>
     <message>
-        <location filename="../PipxAppStartDialog.py" line="158"/>
-        <source>The process {0} could not be started.</source>
-        <translation>Невозможно запустить процесс {0}.</translation>
+      <location filename="../PipxAppStartDialog.py" line="158" />
+      <source>The process {0} could not be started.</source>
+      <translation>Невозможно запустить процесс {0}.</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>PipxDependenciesDialog</name>
     <message>
-        <location filename="../PipxDependenciesDialog.py" line="50"/>
-        <source>Outdated Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
-        <translation>Устаревшие зависимости пакета &lt;b&gt;{0}&lt;/b&gt;</translation>
+      <location filename="../PipxDependenciesDialog.py" line="50" />
+      <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="52"/>
-        <source>Up-to-date Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
-        <translation>Обновленные зависимости пакета &lt;b&gt;{0}&lt;/b&gt;</translation>
+      <location filename="../PipxDependenciesDialog.py" line="52" />
+      <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="54"/>
-        <source>Dependencies of package &lt;b&gt;{0}&lt;/b&gt;</source>
-        <translation>Зависимости пакета &lt;b&gt;{0}&lt;/b&gt;</translation>
+      <location filename="../PipxDependenciesDialog.py" line="54" />
+      <source>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.ui" line="0"/>
-        <source>Package Dependencies</source>
-        <translation>Зависимости пакета</translation>
+      <location filename="../PipxDependenciesDialog.ui" line="0" />
+      <source>Package Dependencies</source>
+      <translation>Зависимости пакета</translation>
     </message>
     <message>
-        <location filename="../PipxDependenciesDialog.ui" line="0"/>
-        <source>Dependency</source>
-        <translation>Зависимость</translation>
+      <location filename="../PipxDependenciesDialog.ui" line="0" />
+      <source>Dependency</source>
+      <translation>Зависимость</translation>
     </message>
     <message>
-        <location filename="../PipxDependenciesDialog.ui" line="0"/>
-        <source>Installed Version</source>
-        <translation>Установленная версия</translation>
+      <location filename="../PipxDependenciesDialog.ui" line="0" />
+      <source>Installed Version</source>
+      <translation>Установленная версия</translation>
     </message>
     <message>
-        <location filename="../PipxDependenciesDialog.ui" line="0"/>
-        <source>Available Version</source>
-        <translation>Доступная версия</translation>
+      <location filename="../PipxDependenciesDialog.ui" line="0" />
+      <source>Available Version</source>
+      <translation>Доступная версия</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>PipxExecDialog</name>
     <message>
-        <location filename="../PipxExecDialog.ui" line="0"/>
-        <source>Output</source>
-        <translation>Вывод</translation>
+      <location filename="../PipxExecDialog.ui" line="0" />
+      <source>Output</source>
+      <translation>Вывод</translation>
     </message>
     <message>
-        <location filename="../PipxExecDialog.ui" line="0"/>
-        <source>Errors</source>
-        <translation>Ошибки</translation>
+      <location filename="../PipxExecDialog.ui" line="0" />
+      <source>Errors</source>
+      <translation>Ошибки</translation>
     </message>
     <message>
-        <location filename="../PipxExecDialog.py" line="153"/>
-        <source>Process Generation Error</source>
-        <translation>Ошибка при запуске процесса</translation>
+      <location filename="../PipxExecDialog.py" line="153" />
+      <source>Process Generation Error</source>
+      <translation>Ошибка при запуске процесса</translation>
     </message>
     <message>
-        <location filename="../PipxExecDialog.py" line="154"/>
-        <source>The process {0} could not be started.</source>
-        <translation>Невозможно запустить процесс {0}.</translation>
+      <location filename="../PipxExecDialog.py" line="154" />
+      <source>The process {0} could not be started.</source>
+      <translation>Невозможно запустить процесс {0}.</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>PipxInterpretersDialog</name>
     <message>
-        <location filename="../PipxInterpretersDialog.ui" line="0"/>
-        <source>Standalone Python Interpreters</source>
-        <translation>Автономные интерпретаторы Python</translation>
+      <location filename="../PipxInterpretersDialog.ui" line="0" />
+      <source>Standalone Python Interpreters</source>
+      <translation>Автономные интерпретаторы Python</translation>
     </message>
     <message>
-        <location filename="../PipxInterpretersDialog.ui" line="0"/>
-        <source>Press to refresh the list of interpreters.</source>
-        <translation>Освежить список интерпретаторов.</translation>
+      <location filename="../PipxInterpretersDialog.ui" line="0" />
+      <source>Press to refresh the list of interpreters.</source>
+      <translation>Освежить список интерпретаторов.</translation>
     </message>
     <message>
-        <location filename="../PipxInterpretersDialog.ui" line="0"/>
-        <source>Press to upgrade installed interpreters to the latest micro version.</source>
-        <translation>Обновить установленные интерпретаторы до последней микро-версии.</translation>
+      <location filename="../PipxInterpretersDialog.ui" line="0" />
+      <source>Press to upgrade installed interpreters to the latest micro version.</source>
+      <translation>Обновить установленные интерпретаторы до последней микро-версии.</translation>
     </message>
     <message>
-        <location filename="../PipxInterpretersDialog.ui" line="0"/>
-        <source>Press to prune all unused interpreters.</source>
-        <translation>Удалить все неиспользуемые интерпретаторы.</translation>
+      <location filename="../PipxInterpretersDialog.ui" line="0" />
+      <source>Press to prune all unused interpreters.</source>
+      <translation>Удалить все неиспользуемые интерпретаторы.</translation>
     </message>
     <message>
-        <location filename="../PipxInterpretersDialog.ui" line="0"/>
-        <source>Interpreter/Package</source>
-        <translation>Интерпретатор/Пакет</translation>
+      <location filename="../PipxInterpretersDialog.ui" line="0" />
+      <source>Interpreter/Package</source>
+      <translation>Интерпретатор/Пакет</translation>
     </message>
     <message>
-        <location filename="../PipxInterpretersDialog.py" line="57"/>
-        <source>Python {0}{1}</source>
-        <translation>Python {0}{1}</translation>
+      <location filename="../PipxInterpretersDialog.py" line="57" />
+      <source>Python {0}{1}</source>
+      <translation>Python {0}{1}</translation>
     </message>
     <message>
-        <location filename="../PipxInterpretersDialog.py" line="62"/>
-        <source> (unused)</source>
-        <translation> (неиспользуемый)</translation>
+      <location filename="../PipxInterpretersDialog.py" line="62" />
+      <source> (unused)</source>
+      <translation> (неиспользуемый)</translation>
     </message>
     <message>
-        <location filename="../PipxInterpretersDialog.py" line="71"/>
-        <source>{0} {1}</source>
-        <comment>package, version</comment>
-        <translation>{0} {1}</translation>
+      <location filename="../PipxInterpretersDialog.py" line="71" />
+      <source>{0} {1}</source>
+      <comment>package, version</comment>
+      <translation>{0} {1}</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>PipxPackagesInputDialog</name>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Packages</source>
-        <translation>Пакеты</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Packages</source>
+      <translation>Пакеты</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Package Specifications (separated by whitespace):</source>
-        <translation>Обозначения пакетов (разделенные символом пропуска):</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Package Specifications (separated by whitespace):</source>
+      <translation>Обозначения пакетов (разделенные символом пропуска):</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Standalone Python Interpreter</source>
-        <translation>Автономный интерпретатор Python</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Standalone Python Interpreter</source>
+      <translation>Автономный интерпретатор Python</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>&lt;b&gt;Note:&lt;/b&gt; Leave this entry empty to use the default Python interpreter.</source>
-        <translation>&lt;b&gt;Примечание:&lt;/b&gt; Оставьте это поле пустым, чтобы использовать интерпретатор Python по умолчанию.</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; Leave this entry empty to use the default Python interpreter.</source>
+      <translation>&lt;b&gt;Примечание:&lt;/b&gt; Оставьте это поле пустым, чтобы использовать интерпретатор Python по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Version:</source>
-        <translation>Версия:</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Version:</source>
+      <translation>Версия:</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Enter the version number of the Python interpreter to be used.</source>
-        <translation>Введите номер версии интерпретатора Python который будет использоваться.</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Enter the version number of the Python interpreter to be used.</source>
+      <translation>Введите номер версии интерпретатора Python который будет использоваться.</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Select to fetch a standalone Python build from GitHub if the specified Python version is not found locally on the system.</source>
-        <translation>Разрешить загружать автономную сборку Python с GitHub, если заданная версия Python не найдена локально в системе.</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Select to fetch a standalone Python build from GitHub if the specified Python version is not found locally on the system.</source>
+      <translation>Разрешить загружать автономную сборку Python с GitHub, если заданная версия Python не найдена локально в системе.</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Fetch missing Python interpreter</source>
-        <translation>Загружать отсутствующий интерпретатор Python</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Fetch missing Python interpreter</source>
+      <translation>Загружать отсутствующий интерпретатор Python</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Select to force the modification of existing virtual environments.</source>
-        <translation>Разрешить принудительно изменять существующие виртуальные среды.</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Select to force the modification of existing virtual environments.</source>
+      <translation>Разрешить принудительно изменять существующие виртуальные среды.</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Force virtual environment modifications</source>
-        <translation>Принудительно изменять виртуальную среду</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Force virtual environment modifications</source>
+      <translation>Принудительно изменять виртуальную среду</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>Select to give the virtual environment access to the system site-packages directory.</source>
-        <translation>Разрешить предоставлять виртуальной среде доступ к системному каталогу site-packages.</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>Select to give the virtual environment access to the system site-packages directory.</source>
+      <translation>Разрешить предоставлять виртуальной среде доступ к системному каталогу site-packages.</translation>
     </message>
     <message>
-        <location filename="../PipxPackagesInputDialog.ui" line="0"/>
-        <source>System-wide Python Packages</source>
-        <translation>Общесистемные пакеты Python</translation>
+      <location filename="../PipxPackagesInputDialog.ui" line="0" />
+      <source>System-wide Python Packages</source>
+      <translation>Общесистемные пакеты Python</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>PipxPage</name>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>&lt;b&gt;Configure Python Application Management&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Настройка управления приложениями Python&lt;/b&gt;</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>&lt;b&gt;Configure Python Application Management&lt;/b&gt;</source>
+      <translation>&lt;b&gt;Настройка управления приложениями Python&lt;/b&gt;</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Index URL</source>
-        <translation>URL-адрес индекса</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Index URL</source>
+      <translation>URL-адрес индекса</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>&lt;b&gt;Note&lt;/b&gt;: The index URL is configured on the &apos;Python Package Management&apos; page.</source>
-        <translation>&lt;b&gt;Примечание&lt;/b&gt;: URL-адрес индекса настраивается на странице &apos;Менеджер пакетов Python&apos;.</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>&lt;b&gt;Note&lt;/b&gt;: The index URL is configured on the 'Python Package Management' page.</source>
+      <translation>&lt;b&gt;Примечание&lt;/b&gt;: URL-адрес индекса настраивается на странице 'Менеджер пакетов Python'.</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Outdated Application Packages</source>
-        <translation>Устаревшие пакеты приложений</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Outdated Application Packages</source>
+      <translation>Устаревшие пакеты приложений</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Select to determine outdated packages when loading the list of installed packages.</source>
-        <translation>Разрешить определить устаревшие пакеты при загрузке списка установленных пакетов.</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Select to determine outdated packages when loading the list of installed packages.</source>
+      <translation>Разрешить определить устаревшие пакеты при загрузке списка установленных пакетов.</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Determine outdated packages automatically</source>
-        <translation>Автоматически определять устаревшие пакеты</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Determine outdated packages automatically</source>
+      <translation>Автоматически определять устаревшие пакеты</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Select to determine packages with any outdated dependencies when determining outdated packages.</source>
-        <translation>Разрешить определять пакеты с любыми устаревшими зависимостями при определении устаревших пакетов.</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Select to determine packages with any outdated dependencies when determining outdated packages.</source>
+      <translation>Разрешить определять пакеты с любыми устаревшими зависимостями при определении устаревших пакетов.</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Determine packages with outdated dependencies</source>
-        <translation>Определять пакеты с устаревшими зависимостями</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Determine packages with outdated dependencies</source>
+      <translation>Определять пакеты с устаревшими зависимостями</translation>
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Recent Application Working Directories</source>
-        <translation>Последние рабочие директории приложений</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Periodic Check Interval:</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Number of recent working directories:</source>
-        <translation>Количество последних рабочих директорий:</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>&lt;p&gt;Enter the interval in hours for a periodic check for outdated packages (1 &amp;le; value &amp;le; 24; 0 = disabled).&lt;/p&gt;</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../ConfigurationPage/PipxPage.ui" line="0"/>
-        <source>Enter the number of recently used working directories  to remember</source>
-        <translation>Задайте количество недавно использованных рабочих директорий для запоминания</translation>
-    </message>
-</context>
-<context>
-    <name>PipxReinstallDialog</name>
-    <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Package Re-Installation</source>
-        <translation>Переустановка пакета</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>disabled</source>
+      <translation type="unfinished" />
     </message>
     <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Skip Packages</source>
-        <translation>Пропуск пакетов</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source> hours</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Recent Application Working Directories</source>
+      <translation>Последние рабочие директории приложений</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Number of recent working directories:</source>
+      <translation>Количество последних рабочих директорий:</translation>
     </message>
     <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Package Specifications (separated by whitespace):</source>
-        <translation>Обозначения пакетов (разделенные символом пропуска):</translation>
+      <location filename="../ConfigurationPage/PipxPage.ui" line="0" />
+      <source>Enter the number of recently used working directories  to remember</source>
+      <translation>Задайте количество недавно использованных рабочих директорий для запоминания</translation>
+    </message>
+  </context>
+  <context>
+    <name>PipxReinstallDialog</name>
+    <message>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Package Re-Installation</source>
+      <translation>Переустановка пакета</translation>
     </message>
     <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Standalone Python Interpreter</source>
-        <translation>Автономный интерпретатор Python</translation>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Skip Packages</source>
+      <translation>Пропуск пакетов</translation>
     </message>
     <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>&lt;b&gt;Note:&lt;/b&gt; Leave this entry empty to use the default Python interpreter.</source>
-        <translation>&lt;b&gt;Примечание:&lt;/b&gt; Оставьте это поле пустым для использования интерпретатора Python по умолчанию.</translation>
-    </message>
-    <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Version:</source>
-        <translation>Версия:</translation>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Package Specifications (separated by whitespace):</source>
+      <translation>Обозначения пакетов (разделенные символом пропуска):</translation>
     </message>
     <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Enter the version number of the Python interpreter to be used.</source>
-        <translation>Введите номер версии интерпретатора Python, который будет использоваться.</translation>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Standalone Python Interpreter</source>
+      <translation>Автономный интерпретатор Python</translation>
     </message>
     <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Select to fetch a standalone Python build from GitHub if the specified Python version is not found locally on the system.</source>
-        <translation>Разрешить загружать автономную сборку Python с GitHub, если заданная версия Python не найдена локально в системе.</translation>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; Leave this entry empty to use the default Python interpreter.</source>
+      <translation>&lt;b&gt;Примечание:&lt;/b&gt; Оставьте это поле пустым для использования интерпретатора Python по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../PipxReinstallDialog.ui" line="0"/>
-        <source>Fetch missing Python interpreter</source>
-        <translation>Загружать отсутствующий интерпретатор Python</translation>
-    </message>
-</context>
-<context>
-    <name>PipxSpecInputDialog</name>
-    <message>
-        <location filename="../PipxSpecInputDialog.py" line="40"/>
-        <source>JSON Files (*.json);;All Files (*)</source>
-        <translation>Файлы JSON (*.json);;Все файлы (*)</translation>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Version:</source>
+      <translation>Версия:</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Spec Metadata File</source>
-        <translation>Файл спецификации метаданных</translation>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Enter the version number of the Python interpreter to be used.</source>
+      <translation>Введите номер версии интерпретатора Python, который будет использоваться.</translation>
+    </message>
+    <message>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Select to fetch a standalone Python build from GitHub if the specified Python version is not found locally on the system.</source>
+      <translation>Разрешить загружать автономную сборку Python с GitHub, если заданная версия Python не найдена локально в системе.</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Spec Metadata File:</source>
-        <translation>Файл спецификации метаданных:</translation>
+      <location filename="../PipxReinstallDialog.ui" line="0" />
+      <source>Fetch missing Python interpreter</source>
+      <translation>Загружать отсутствующий интерпретатор Python</translation>
     </message>
+  </context>
+  <context>
+    <name>PipxSpecInputDialog</name>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Enter the path of the spec metadata file.</source>
-        <translation>Введите путь к файлу спецификации метаданных.</translation>
+      <location filename="../PipxSpecInputDialog.py" line="40" />
+      <source>JSON Files (*.json);;All Files (*)</source>
+      <translation>Файлы JSON (*.json);;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Standalone Python Interpreter</source>
-        <translation>Автономный интерпретатор Python</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Spec Metadata File</source>
+      <translation>Файл спецификации метаданных</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>&lt;b&gt;Note:&lt;/b&gt; Leave this entry empty to use the default Python interpreter.</source>
-        <translation>&lt;b&gt;Примечание:&lt;/b&gt; Оставьте это поле пустым, чтобы использовать интерпретатор Python по умолчанию.</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Spec Metadata File:</source>
+      <translation>Файл спецификации метаданных:</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Version:</source>
-        <translation>Версия:</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Enter the path of the spec metadata file.</source>
+      <translation>Введите путь к файлу спецификации метаданных.</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Enter the version number of the Python interpreter to be used.</source>
-        <translation>Введите номер версии интерпретатора Python, который будет использоваться.</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Standalone Python Interpreter</source>
+      <translation>Автономный интерпретатор Python</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Select to fetch a standalone Python build from GitHub if the specified Python version is not found locally on the system.</source>
-        <translation>Разрешить загружать автономную сборку Python с GitHub, если заданная версия Python не найдена локально в системе.</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; Leave this entry empty to use the default Python interpreter.</source>
+      <translation>&lt;b&gt;Примечание:&lt;/b&gt; Оставьте это поле пустым, чтобы использовать интерпретатор Python по умолчанию.</translation>
+    </message>
+    <message>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Version:</source>
+      <translation>Версия:</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Fetch missing Python interpreter</source>
-        <translation>Загружать отсутствующий интерпретатор Python</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Enter the version number of the Python interpreter to be used.</source>
+      <translation>Введите номер версии интерпретатора Python, который будет использоваться.</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Select to force the modification of existing virtual environments.</source>
-        <translation>Разрешить принудительно изменять существующие виртуальные среды.</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Select to fetch a standalone Python build from GitHub if the specified Python version is not found locally on the system.</source>
+      <translation>Разрешить загружать автономную сборку Python с GitHub, если заданная версия Python не найдена локально в системе.</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Force virtual environment modifications</source>
-        <translation>Принудительно изменять виртуальную среду</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Fetch missing Python interpreter</source>
+      <translation>Загружать отсутствующий интерпретатор Python</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>Select to give the virtual environment access to the system site-packages directory.</source>
-        <translation>Разрешить предоставлять виртуальной среде доступ к системной директории site-packages.</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Select to force the modification of existing virtual environments.</source>
+      <translation>Разрешить принудительно изменять существующие виртуальные среды.</translation>
     </message>
     <message>
-        <location filename="../PipxSpecInputDialog.ui" line="0"/>
-        <source>System-wide Python Packages</source>
-        <translation>Общесистемные пакеты Python</translation>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Force virtual environment modifications</source>
+      <translation>Принудительно изменять виртуальную среду</translation>
     </message>
-</context>
-<context>
+    <message>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>Select to give the virtual environment access to the system site-packages directory.</source>
+      <translation>Разрешить предоставлять виртуальной среде доступ к системной директории site-packages.</translation>
+    </message>
+    <message>
+      <location filename="../PipxSpecInputDialog.ui" line="0" />
+      <source>System-wide Python Packages</source>
+      <translation>Общесистемные пакеты Python</translation>
+    </message>
+  </context>
+  <context>
     <name>PipxWidget</name>
     <message>
-        <location filename="../PipxWidget.py" line="113"/>
-        <source>Install</source>
-        <translation>Установить</translation>
-    </message>
-    <message>
-        <location filename="../PipxWidget.py" line="246"/>
-        <location filename="../PipxWidget.py" line="115"/>
-        <source>Install Packages</source>
-        <translation>Установить пакеты</translation>
-    </message>
-    <message>
-        <location filename="../PipxWidget.py" line="265"/>
-        <location filename="../PipxWidget.py" line="118"/>
-        <source>Install All Packages</source>
-        <translation>Установить все пакеты</translation>
+      <location filename="../PipxWidget.py" line="126" />
+      <source>Install</source>
+      <translation>Установить</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="122"/>
-        <source>Re-Install Selected Package</source>
-        <translation>Переустановить выбранный пакет</translation>
+      <location filename="../PipxWidget.py" line="259" />
+      <location filename="../PipxWidget.py" line="128" />
+      <source>Install Packages</source>
+      <translation>Установить пакеты</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="363"/>
-        <location filename="../PipxWidget.py" line="125"/>
-        <source>Re-Install All Packages</source>
-        <translation>Переустановить все пакеты</translation>
+      <location filename="../PipxWidget.py" line="278" />
+      <location filename="../PipxWidget.py" line="131" />
+      <source>Install All Packages</source>
+      <translation>Установить все пакеты</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="321"/>
-        <location filename="../PipxWidget.py" line="312"/>
-        <location filename="../PipxWidget.py" line="300"/>
-        <location filename="../PipxWidget.py" line="284"/>
-        <location filename="../PipxWidget.py" line="129"/>
-        <source>Create Spec Metadata File</source>
-        <translation>Создать файл спецификации метаданных</translation>
+      <location filename="../PipxWidget.py" line="135" />
+      <source>Re-Install Selected Package</source>
+      <translation>Переустановить выбранный пакет</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="136"/>
-        <source>Upgrade</source>
-        <translation>Обновить</translation>
+      <location filename="../PipxWidget.py" line="376" />
+      <location filename="../PipxWidget.py" line="138" />
+      <source>Re-Install All Packages</source>
+      <translation>Переустановить все пакеты</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="138"/>
-        <source>Check Outdated Packages</source>
-        <translation>Проверить устаревшие пакеты</translation>
+      <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" />
+      <source>Create Spec Metadata File</source>
+      <translation>Создать файл спецификации метаданных</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="434"/>
-        <location filename="../PipxWidget.py" line="142"/>
-        <source>Upgrade Selected Package</source>
-        <translation>Обновить выбранный пакет</translation>
+      <location filename="../PipxWidget.py" line="149" />
+      <source>Upgrade</source>
+      <translation>Обновить</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="459"/>
-        <location filename="../PipxWidget.py" line="145"/>
-        <source>Upgrade All Packages</source>
-        <translation>Обновить все пакеты</translation>
+      <location filename="../PipxWidget.py" line="151" />
+      <source>Check Outdated Packages</source>
+      <translation>Проверить устаревшие пакеты</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="149"/>
-        <source>Upgrade Shared Libraries</source>
-        <translation>Обновить общие библиотеки</translation>
+      <location filename="../PipxWidget.py" line="464" />
+      <location filename="../PipxWidget.py" line="155" />
+      <source>Upgrade Selected Package</source>
+      <translation>Обновить выбранный пакет</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="156"/>
-        <source>Uninstall</source>
-        <translation>Деинсталировать</translation>
+      <location filename="../PipxWidget.py" line="489" />
+      <location filename="../PipxWidget.py" line="158" />
+      <source>Upgrade All Packages</source>
+      <translation>Обновить все пакеты</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="158"/>
-        <source>Uninstall Selected Package</source>
-        <translation>Деинсталировать выбранный пакет</translation>
+      <location filename="../PipxWidget.py" line="162" />
+      <source>Upgrade Shared Libraries</source>
+      <translation>Обновить общие библиотеки</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="501"/>
-        <location filename="../PipxWidget.py" line="161"/>
-        <source>Uninstall All Packages</source>
-        <translation>Деинсталировать все пакеты</translation>
+      <location filename="../PipxWidget.py" line="169" />
+      <source>Uninstall</source>
+      <translation>Деинсталировать</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="168"/>
-        <source>Dependencies</source>
-        <translation>Зависимости</translation>
+      <location filename="../PipxWidget.py" line="171" />
+      <source>Uninstall Selected Package</source>
+      <translation>Деинсталировать выбранный пакет</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="170"/>
-        <source>Show All Dependencies</source>
-        <translation>Показать все зависимости</translation>
+      <location filename="../PipxWidget.py" line="531" />
+      <location filename="../PipxWidget.py" line="174" />
+      <source>Uninstall All Packages</source>
+      <translation>Деинсталировать все пакеты</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="173"/>
-        <source>Show Outdated Dependencies</source>
-        <translation>Показать устаревшие зависимости</translation>
+      <location filename="../PipxWidget.py" line="181" />
+      <source>Dependencies</source>
+      <translation>Зависимости</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="176"/>
-        <source>Show Up-to-date Dependencies</source>
-        <translation>Показать актуальные зависимости</translation>
+      <location filename="../PipxWidget.py" line="183" />
+      <source>Show All Dependencies</source>
+      <translation>Показать все зависимости</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="180"/>
-        <source>Upgrade Dependencies</source>
-        <translation>Обновить зависимости</translation>
+      <location filename="../PipxWidget.py" line="186" />
+      <source>Show Outdated Dependencies</source>
+      <translation>Показать устаревшие зависимости</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="199"/>
-        <source>Standalone Interpreters</source>
-        <translation>Автономные интерпретаторы</translation>
+      <location filename="../PipxWidget.py" line="189" />
+      <source>Show Up-to-date Dependencies</source>
+      <translation>Показать актуальные зависимости</translation>
+    </message>
+    <message>
+      <location filename="../PipxWidget.py" line="193" />
+      <source>Upgrade Dependencies</source>
+      <translation>Обновить зависимости</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="203"/>
-        <source>Ensure PATH Modifications</source>
-        <translation>Внести изменения в переменную PATH</translation>
+      <location filename="../PipxWidget.py" line="212" />
+      <source>Standalone Interpreters</source>
+      <translation>Автономные интерпретаторы</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="206"/>
-        <source>Configure...</source>
-        <translation>Настроить...</translation>
+      <location filename="../PipxWidget.py" line="216" />
+      <source>Ensure PATH Modifications</source>
+      <translation>Внести изменения в переменную PATH</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="286"/>
-        <source>JSON Files (*.json);;All Files (*)</source>
-        <translation>Файлы JSON (*.json);;Все файлы (*)</translation>
+      <location filename="../PipxWidget.py" line="219" />
+      <source>Configure...</source>
+      <translation>Настроить...</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="287"/>
-        <source>JSON Files (*.json)</source>
-        <translation>Файлы JSON (*.json)</translation>
+      <location filename="../PipxWidget.py" line="299" />
+      <source>JSON Files (*.json);;All Files (*)</source>
+      <translation>Файлы JSON (*.json);;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="301"/>
-        <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>
+      <location filename="../PipxWidget.py" line="300" />
+      <source>JSON Files (*.json)</source>
+      <translation>Файлы JSON (*.json)</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="313"/>
-        <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>
+      <location filename="../PipxWidget.py" line="314" />
+      <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="322"/>
-        <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>
+      <location filename="../PipxWidget.py" line="326" />
+      <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="338"/>
-        <source>Re-Install Package</source>
-        <translation>Переустановить пакет</translation>
+      <location filename="../PipxWidget.py" line="335" />
+      <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="339"/>
-        <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>
+      <location filename="../PipxWidget.py" line="351" />
+      <source>Re-Install Package</source>
+      <translation>Переустановить пакет</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="364"/>
-        <source>Do you really want to reinstall all packages?</source>
-        <translation>Вы действительно хотите переустановить все пакеты?</translation>
+      <location filename="../PipxWidget.py" line="352" />
+      <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="435"/>
-        <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>
+      <location filename="../PipxWidget.py" line="377" />
+      <source>Do you really want to reinstall all packages?</source>
+      <translation>Вы действительно хотите переустановить все пакеты?</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="460"/>
-        <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>
+      <location filename="../PipxWidget.py" line="465" />
+      <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="485"/>
-        <source>Uninstall Package</source>
-        <translation>Деинсталировать пакет</translation>
+      <location filename="../PipxWidget.py" line="490" />
+      <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="486"/>
-        <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>
+      <location filename="../PipxWidget.py" line="515" />
+      <source>Uninstall Package</source>
+      <translation>Деинсталировать пакет</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="502"/>
-        <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>
+      <location filename="../PipxWidget.py" line="516" />
+      <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="606"/>
-        <source>&lt;b&gt;pipx Version {0}&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Версия pipx {0}&lt;/b&gt;</translation>
+      <location filename="../PipxWidget.py" line="532" />
+      <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="636" />
+      <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="636"/>
-        <source>{0} ({1})</source>
-        <comment>current version, latest version</comment>
-        <translation>{0} ({1})</translation>
+      <location filename="../PipxWidget.py" line="666" />
+      <source>{0} ({1})</source>
+      <comment>current version, latest version</comment>
+      <translation>{0} ({1})</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="644"/>
-        <source>package and some dependencies outdated</source>
-        <translation>пакет и некоторые зависимости устарели</translation>
+      <location filename="../PipxWidget.py" line="674" />
+      <source>package and some dependencies outdated</source>
+      <translation>пакет и некоторые зависимости устарели</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="647"/>
-        <source>package outdated</source>
-        <translation>пакет устарел</translation>
-    </message>
-    <message>
-        <location filename="../PipxWidget.py" line="661"/>
-        <source>some dependencies outdated</source>
-        <translation>некоторые зависимости устарели</translation>
+      <location filename="../PipxWidget.py" line="677" />
+      <source>package outdated</source>
+      <translation>пакет устарел</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="676"/>
-        <source>everything up-to-date</source>
-        <translation>все обновлено</translation>
+      <location filename="../PipxWidget.py" line="691" />
+      <source>some dependencies outdated</source>
+      <translation>некоторые зависимости устарели</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="703"/>
-        <source>{0}{1}</source>
-        <comment>Python version, standalone indicator</comment>
-        <translation></translation>
+      <location filename="../PipxWidget.py" line="706" />
+      <source>everything up-to-date</source>
+      <translation>все обновлено</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.py" line="705"/>
-        <source> (standalone)</source>
-        <translation> (автономный)</translation>
+      <location filename="../PipxWidget.py" line="733" />
+      <source>{0}{1}</source>
+      <comment>Python version, standalone indicator</comment>
+      <translation />
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Paths Information</source>
-        <translation>Информация о путях</translation>
+      <location filename="../PipxWidget.py" line="735" />
+      <source> (standalone)</source>
+      <translation> (автономный)</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Virtual Environments:</source>
-        <translation>Виртуальные среды:</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Paths Information</source>
+      <translation>Информация о путях</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Applications:</source>
-        <translation>Приложения:</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Virtual Environments:</source>
+      <translation>Виртуальные среды:</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Manual Pages:</source>
-        <translation>Страницы руководства:</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Applications:</source>
+      <translation>Приложения:</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Standalone Interpreters:</source>
-        <translation>Автономные интерпретаторы:</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Manual Pages:</source>
+      <translation>Страницы руководства:</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Press to refresh the packages list.</source>
-        <translation>Освежить список пакетов.</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Standalone Interpreters:</source>
+      <translation>Автономные интерпретаторы:</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Press to install packages.</source>
-        <translation>Установить пакеты.</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to refresh the packages list.</source>
+      <translation>Освежить список пакетов.</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Press to check for outdated packages.</source>
-        <translation>Проверить устаревшие пакеты.</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to install packages.</source>
+      <translation>Установить пакеты.</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Press to upgrade the selected package.</source>
-        <translation>Обновить выбранный пакет.</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to check for outdated packages.</source>
+      <translation>Проверить устаревшие пакеты.</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Press to uninstall the selected package.</source>
-        <translation>Деинсталировать выбранный пакет.</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to upgrade the selected package.</source>
+      <translation>Обновить выбранный пакет.</translation>
+    </message>
+    <message>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Press to uninstall the selected package.</source>
+      <translation>Деинсталировать выбранный пакет.</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Package/Application</source>
-        <translation>Пакет/Приложение</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Package/Application</source>
+      <translation>Пакет/Приложение</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Version</source>
-        <translation>Версия</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Version</source>
+      <translation>Версия</translation>
     </message>
     <message>
-        <location filename="../PipxWidget.ui" line="0"/>
-        <source>Python Version</source>
-        <translation>Версия Python</translation>
+      <location filename="../PipxWidget.ui" line="0" />
+      <source>Python Version</source>
+      <translation>Версия Python</translation>
     </message>
-</context>
-<context>
+  </context>
+  <context>
     <name>PluginPipxInterface</name>
     <message>
-        <location filename="../../PluginPipxInterface.py" line="190"/>
-        <location filename="../../PluginPipxInterface.py" line="189"/>
-        <location filename="../../PluginPipxInterface.py" line="185"/>
-        <location filename="../../PluginPipxInterface.py" line="72"/>
-        <source>PyPI Application Management</source>
-        <translation>Управление приложениями PyPI</translation>
+      <location filename="../../PluginPipxInterface.py" line="197" />
+      <location filename="../../PluginPipxInterface.py" line="196" />
+      <location filename="../../PluginPipxInterface.py" line="192" />
+      <location filename="../../PluginPipxInterface.py" line="72" />
+      <source>PyPI Application Management</source>
+      <translation>Управление приложениями PyPI</translation>
     </message>
     <message>
-        <location filename="../../PluginPipxInterface.py" line="114"/>
-        <source>Python Application Management</source>
-        <translation>Менеджер приложений Python</translation>
+      <location filename="../../PluginPipxInterface.py" line="114" />
+      <source>Python Application Management</source>
+      <translation>Менеджер приложений Python</translation>
     </message>
     <message>
-        <location filename="../../PluginPipxInterface.py" line="191"/>
-        <source>Ctrl+Alt+Shift+A</source>
-        <translation>Ctrl+Alt+Shift+A</translation>
+      <location filename="../../PluginPipxInterface.py" line="198" />
+      <source>Ctrl+Alt+Shift+A</source>
+      <translation>Ctrl+Alt+Shift+A</translation>
     </message>
     <message>
-        <location filename="../../PluginPipxInterface.py" line="197"/>
-        <source>Switch the input focus to the PyPI Application Management window.</source>
-        <translation>Переключите фокус ввода на окно управления приложением PyPI.</translation>
+      <location filename="../../PluginPipxInterface.py" line="204" />
+      <source>Switch the input focus to the PyPI Application Management window.</source>
+      <translation>Переключите фокус ввода на окно управления приложением PyPI.</translation>
     </message>
     <message>
-        <location filename="../../PluginPipxInterface.py" line="200"/>
-        <source>&lt;b&gt;Activate PyPI Application Management&lt;/b&gt;&lt;p&gt;This switches the input focus to the PyPI Application Management window.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Активировать управление приложениями PyPI.&lt;/b&gt;&lt;p&gt; Это переключит фокус ввода на окно управления приложениями PyPI.&lt;/p&gt;</translation>
+      <location filename="../../PluginPipxInterface.py" line="207" />
+      <source>&lt;b&gt;Activate PyPI Application Management&lt;/b&gt;&lt;p&gt;This switches the input focus to the PyPI Application Management window.&lt;/p&gt;</source>
+      <translation>&lt;b&gt;Активировать управление приложениями PyPI.&lt;/b&gt;&lt;p&gt; Это переключит фокус ввода на окно управления приложениями PyPI.&lt;/p&gt;</translation>
     </message>
-</context>
+  </context>
 </TS>
--- a/PluginPipxInterface.py	Tue Sep 17 11:04:00 2024 +0200
+++ b/PluginPipxInterface.py	Tue Sep 17 11:35:31 2024 +0200
@@ -11,7 +11,7 @@
 import os
 import sysconfig
 
-from PyQt6.QtCore import QCoreApplication, QObject, Qt, QTranslator
+from PyQt6.QtCore import QCoreApplication, QObject, Qt, QTranslator, pyqtSignal
 from PyQt6.QtGui import QKeySequence
 
 from eric7 import Globals, Preferences
@@ -36,7 +36,7 @@
     "author": "Detlev Offenbach <detlev@die-offenbachs.de>",
     "autoactivate": True,
     "deactivateable": True,
-    "version": "10.4.1",
+    "version": "10.5.0",
     "className": "PluginPipxInterface",
     "packageName": "PipxInterface",
     "shortDescription": "Graphical interface to the 'pipx' command.",
@@ -132,10 +132,15 @@
 class PluginPipxInterface(QObject):
     """
     Class documentation goes here.
+
+    @signal preferencesChanged() emitted to signal a change of preferences. This
+        signal is simply relayed from the main UI.
     """
 
     PreferencesKey = "Pipx"
 
+    preferencesChanged = pyqtSignal()
+
     def __init__(self, ui):
         """
         Constructor
@@ -152,6 +157,8 @@
             "MaxRecentAppWorkdirs": 20,
             "IncludeOutdatedDependencies": True,
             "AutoCheckOutdated": False,
+            "PeriodicOutdatedCheckInterval": 1,
+            # interval in hours, 0 = disable; 1 h <= value <= 24 h
         }
 
         self.__translator = None
@@ -210,6 +217,7 @@
         menu.addAction(self.__activateAct)
 
         ericApp().getObject("PluginManager").shutdown.connect(self.__widget.shutdown)
+        self.__ui.preferencesChanged.connect(self.preferencesChanged)
 
         return None, True
 
@@ -217,6 +225,7 @@
         """
         Public method to deactivate this plug-in.
         """
+        self.__ui.preferencesChanged.disconnect(self.preferencesChanged)
         ericApp().getObject("PluginManager").shutdown.disconnect(self.__widget.shutdown)
 
         menu = self.__ui.getMenu("subwindow")
@@ -317,7 +326,7 @@
                     self.PreferencesKey + "/" + key, self.__defaults[key]
                 )
             )
-        elif key in ("MaxRecentAppWorkdirs",):
+        elif key in ("MaxRecentAppWorkdirs", "PeriodicOutdatedCheckInterval"):
             return int(
                 Preferences.Prefs.settings.value(
                     self.PreferencesKey + "/" + key, self.__defaults[key]
Binary file PluginPipxInterface.zip has changed
--- a/changelog.md	Tue Sep 17 11:04:00 2024 +0200
+++ b/changelog.md	Tue Sep 17 11:35:31 2024 +0200
@@ -1,6 +1,11 @@
 ChangeLog
 ---------
 
+__Version 10.5.0__
+
+- Added the capability to perform a periodic check for outdated packages or packages
+  with outdated dependencies.
+
 __Version 10.4.1__
 
 - bug fixes

eric ide

mercurial