Sun, 30 May 2021 11:51:44 +0200
Ported the plug-in to PyQt6 for eric7.
# -*- coding: utf-8 -*- # Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing a dialog to enter data for the creation of a tag. """ from PyQt6.QtCore import Qt from PyQt6.QtWidgets import ( QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QLineEdit ) class DjangoTagInputDialog(QDialog): """ Class implementing a dialog to enter data for the creation of a tag. """ def __init__(self, labels, defaults=None, parent=None): """ Constructor @param labels list of labels for the entry fields @type list of str @param defaults list of default values for the entry fields @type list of str @param parent reference to the parent widget @type QWidget @exception RuntimeError raised to signal too many labels were given """ super().__init__(parent) if len(labels) == 0 or len(labels) > 5: raise RuntimeError( "Illegal number of labels given (max. 5 allowed)") self.__inputs = [] self.__topLayout = QVBoxLayout(self) for index, label in enumerate(labels): self.__topLayout.addWidget(QLabel(label, self)) entry = QLineEdit(self) entry.setClearButtonEnabled(True) if defaults and index < len(defaults): entry.setText(defaults[index]) self.__inputs.append(entry) self.__topLayout.addWidget(entry) self.__buttonBox = QDialogButtonBox( QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel, Qt.Orientation.Horizontal, self ) self.__topLayout.addWidget(self.__buttonBox) self.resize(400, self.minimumSizeHint().height()) self.setSizeGripEnabled(True) self.__buttonBox.accepted.connect(self.accept) self.__buttonBox.rejected.connect(self.reject) self.__inputs[0].selectAll() self.__inputs[0].setFocus() def getData(self): """ Public method to retrieve the entered data. @return tuple containing the text of all entries @rtype tuple of str """ data = [input.text().strip() for input in self.__inputs] return tuple(data) @staticmethod def getText(parent, title, labels, defaults=None): """ Public static method to create the dialog and return the entered data. @param parent reference to the parent widget @type QWidget @param title title of the dialog @type str @param labels list of labels for the entry fields @type list of str @param defaults list of default values for the entry fields @type list of str @return tuple of a tuple containing the text of all entries and a flag indicating the acceptance state @rtype tuple of (tuple of str, bool) """ if defaults is None: defaults = [] dlg = DjangoTagInputDialog(labels, defaults, parent) dlg.setWindowTitle(title) if dlg.exec() == QDialog.DialogCode.Accepted: return dlg.getData(), True else: return (), False