Tue, 23 Jun 2020 17:52:32 +0200
Removed support for Python2.
# -*- coding: utf-8 -*- # Copyright (c) 2014 - 2020 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing a dialog to enter data for the creation of a tag. """ from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel from E5Gui.E5LineEdit import E5ClearableLineEdit 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 (list of string) @param defaults list of default values for the entry fields (list of string) @param parent reference to the parent widget (QWidget) @exception RuntimeError raised to signal too many labels were given """ super(DjangoTagInputDialog, self).__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) index = 0 for label in labels: self.__topLayout.addWidget(QLabel(label, self)) entry = E5ClearableLineEdit(self) if defaults and index < len(defaults): entry.setText(defaults[index]) self.__inputs.append(entry) self.__topLayout.addWidget(entry) index += 1 self.__buttonBox = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.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 (tuple of string) """ 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 (QWidget) @param title title of the dialog (string) @param labels list of labels for the entry fields (list of string) @param defaults list of default values for the entry fields (list of string) @return tuple of a tuple containing the text of all entries (tuple of string) and a flag indicating the acceptance state (boolean) """ if defaults is None: defaults = [] dlg = DjangoTagInputDialog(labels, defaults, parent) dlg.setWindowTitle(title) if dlg.exec_() == QDialog.Accepted: return dlg.getData(), True else: return (), False