diff -r 49f3377aebf1 -r 787a6b3f8c9f eric6/PipInterface/PipPackagesWidget.py --- a/eric6/PipInterface/PipPackagesWidget.py Fri Oct 09 17:19:29 2020 +0200 +++ b/eric6/PipInterface/PipPackagesWidget.py Sat Oct 10 12:20:51 2020 +0200 @@ -11,8 +11,7 @@ import textwrap import os -from PyQt5.QtCore import pyqtSlot, Qt, QEventLoop, QRegExp -from PyQt5.QtGui import QCursor +from PyQt5.QtCore import pyqtSlot, Qt, QRegExp from PyQt5.QtWidgets import ( QWidget, QToolButton, QApplication, QHeaderView, QTreeWidgetItem, QInputDialog, QMenu, QDialog @@ -20,6 +19,7 @@ from E5Gui.E5Application import e5App from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverrideCursor from E5Network.E5XmlRpcClient import E5XmlRpcClient @@ -237,47 +237,45 @@ if venvName: interpreter = self.__pip.getVirtualenvInterpreter(venvName) if interpreter: - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) self.statusLabel.show() self.statusLabel.setText( self.tr("Getting installed packages...")) - QApplication.processEvents() - # 1. populate with installed packages - self.packagesList.setUpdatesEnabled(False) - installedPackages = self.__pip.getInstalledPackages( - venvName, - localPackages=self.localCheckBox.isChecked(), - notRequired=self.notRequiredCheckBox.isChecked(), - usersite=self.userCheckBox.isChecked(), - ) - for package, version in installedPackages: - QTreeWidgetItem(self.packagesList, [package, version]) - self.packagesList.setUpdatesEnabled(True) - self.statusLabel.setText( - self.tr("Getting outdated packages...")) - QApplication.processEvents() - - # 2. update with update information - self.packagesList.setUpdatesEnabled(False) - outdatedPackages = self.__pip.getOutdatedPackages( - venvName, - localPackages=self.localCheckBox.isChecked(), - notRequired=self.notRequiredCheckBox.isChecked(), - usersite=self.userCheckBox.isChecked(), - ) - for package, _version, latest in outdatedPackages: - items = self.packagesList.findItems( - package, Qt.MatchExactly | Qt.MatchCaseSensitive) - if items: - itm = items[0] - itm.setText(2, latest) - - self.packagesList.sortItems(0, Qt.AscendingOrder) - for col in range(self.packagesList.columnCount()): - self.packagesList.resizeColumnToContents(col) - self.packagesList.setUpdatesEnabled(True) - QApplication.restoreOverrideCursor() + with E5OverrideCursor(): + # 1. populate with installed packages + self.packagesList.setUpdatesEnabled(False) + installedPackages = self.__pip.getInstalledPackages( + venvName, + localPackages=self.localCheckBox.isChecked(), + notRequired=self.notRequiredCheckBox.isChecked(), + usersite=self.userCheckBox.isChecked(), + ) + for package, version in installedPackages: + QTreeWidgetItem(self.packagesList, [package, version]) + self.packagesList.setUpdatesEnabled(True) + self.statusLabel.setText( + self.tr("Getting outdated packages...")) + QApplication.processEvents() + + # 2. update with update information + self.packagesList.setUpdatesEnabled(False) + outdatedPackages = self.__pip.getOutdatedPackages( + venvName, + localPackages=self.localCheckBox.isChecked(), + notRequired=self.notRequiredCheckBox.isChecked(), + usersite=self.userCheckBox.isChecked(), + ) + for package, _version, latest in outdatedPackages: + items = self.packagesList.findItems( + package, Qt.MatchExactly | Qt.MatchCaseSensitive) + if items: + itm = items[0] + itm.setText(2, latest) + + self.packagesList.sortItems(0, Qt.AscendingOrder) + for col in range(self.packagesList.columnCount()): + self.packagesList.resizeColumnToContents(col) + self.packagesList.setUpdatesEnabled(True) self.statusLabel.hide() self.__updateActionButtons() @@ -339,54 +337,55 @@ if not interpreter: return - QApplication.setOverrideCursor(Qt.WaitCursor) - args = ["-m", "pip", "show"] if self.verboseCheckBox.isChecked(): args.append("--verbose") if self.installedFilesCheckBox.isChecked(): args.append("--files") args.append(itm.text(0)) - success, output = self.__pip.runProcess(args, interpreter) - if success and output: - mode = self.ShowProcessGeneralMode - for line in output.splitlines(): - line = line.rstrip() - if line != "---": - if mode != self.ShowProcessGeneralMode: - if line[0] == " ": - QTreeWidgetItem( - self.infoWidget, - [" ", line.strip()]) - else: - mode = self.ShowProcessGeneralMode - if mode == self.ShowProcessGeneralMode: - try: - label, info = line.split(": ", 1) - except ValueError: - label = line[:-1] - info = "" - label = label.lower() - if label in self.__infoLabels: - QTreeWidgetItem( - self.infoWidget, - [self.__infoLabels[label], info]) - if label == "files": - mode = self.ShowProcessFilesListMode - elif label == "classifiers": - mode = self.ShowProcessClassifiersMode - elif label == "entry-points": - mode = self.ShowProcessEntryPointsMode - self.infoWidget.scrollToTop() - - header = self.infoWidget.header() - header.setStretchLastSection(False) - header.resizeSections(QHeaderView.ResizeToContents) - if header.sectionSize(0) + header.sectionSize(1) < header.width(): - header.setStretchLastSection(True) - - QApplication.restoreOverrideCursor() + with E5OverrideCursor(): + success, output = self.__pip.runProcess(args, interpreter) + + if success and output: + mode = self.ShowProcessGeneralMode + for line in output.splitlines(): + line = line.rstrip() + if line != "---": + if mode != self.ShowProcessGeneralMode: + if line[0] == " ": + QTreeWidgetItem( + self.infoWidget, + [" ", line.strip()]) + else: + mode = self.ShowProcessGeneralMode + if mode == self.ShowProcessGeneralMode: + try: + label, info = line.split(": ", 1) + except ValueError: + label = line[:-1] + info = "" + label = label.lower() + if label in self.__infoLabels: + QTreeWidgetItem( + self.infoWidget, + [self.__infoLabels[label], info]) + if label == "files": + mode = self.ShowProcessFilesListMode + elif label == "classifiers": + mode = self.ShowProcessClassifiersMode + elif label == "entry-points": + mode = self.ShowProcessEntryPointsMode + self.infoWidget.scrollToTop() + + header = self.infoWidget.header() + header.setStretchLastSection(False) + header.resizeSections(QHeaderView.ResizeToContents) + if ( + header.sectionSize(0) + header.sectionSize(1) < + header.width() + ): + header.setStretchLastSection(True) self.__updateActionButtons() @@ -444,17 +443,14 @@ self.environmentsComboBox.clear() self.packagesList.clear() - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) - QApplication.processEvents() - - self.__populateEnvironments() + with E5OverrideCursor(): + self.__populateEnvironments() + + index = self.environmentsComboBox.findText( + currentEnvironment, Qt.MatchExactly | Qt.MatchCaseSensitive) + if index != -1: + self.environmentsComboBox.setCurrentIndex(index) - index = self.environmentsComboBox.findText( - currentEnvironment, Qt.MatchExactly | Qt.MatchCaseSensitive) - if index != -1: - self.environmentsComboBox.setCurrentIndex(index) - - QApplication.restoreOverrideCursor() self.__updateActionButtons() @pyqtSlot() @@ -636,8 +632,6 @@ self.searchInfoLabel.clear() self.searchButton.setEnabled(False) - QApplication.setOverrideCursor(Qt.WaitCursor) - QApplication.processEvents(QEventLoop.ExcludeUserInputEvents) self.__queryName = [ term for term in self.searchEditName.text().strip().split() @@ -688,7 +682,6 @@ count = 0 QApplication.processEvents() else: - QApplication.restoreOverrideCursor() E5MessageBox.warning( self, self.tr("Search PyPI"), @@ -698,7 +691,6 @@ self.tr("""<p>The package search did not return""" """ anything.</p>""")) else: - QApplication.restoreOverrideCursor() E5MessageBox.warning( self, self.tr("Search PyPI"), @@ -724,8 +716,6 @@ """ Private slot performing the search finishing actions. """ - QApplication.restoreOverrideCursor() - self.__updateSearchActionButtons() self.__updateSearchButton() @@ -900,12 +890,10 @@ @param packageVersion version of the package @type str """ - QApplication.setOverrideCursor(Qt.WaitCursor) - QApplication.processEvents(QEventLoop.ExcludeUserInputEvents) + with E5OverrideCursor(): + packageData = self.__pip.getPackageDetails( + packageName, packageVersion) - packageData = self.__pip.getPackageDetails(packageName, packageVersion) - - QApplication.restoreOverrideCursor() if packageData: from .PipPackageDetailsDialog import PipPackageDetailsDialog