def __init__(self, argspec, parent=None, window_title='Function arguments', doc=None): super().__init__(parent) vlayout = QVBoxLayout(self) layout = QFormLayout() widgets = [] defaults = argspec.defaults if argspec.defaults else () defaults = ('', ) * (len(argspec.args[1:]) - len(defaults)) + defaults self.arguments = {} for arg, default in zip(argspec.args[1:], defaults): wid = QLineEdit(self) wid.setObjectName(arg) wid.setText(json.dumps(default)) self.arguments[arg] = default layout.addRow(arg, wid) widgets.append(wid) wid.textChanged.connect(self.on_widget_change(wid)) if doc and arg in doc: wid.setToolTip(doc[arg]) self.widgets = widgets buttonBox = QDialogButtonBox() buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Ok) buttonBox.setEnabled(True) buttonBox.accepted.connect(self.accept) vlayout.addLayout(layout) label = QLabel() label.setText('Values are decoded from text using as JSON.') vlayout.addWidget(label) vlayout.addWidget(buttonBox) self.buttonBox = buttonBox self.valid = {wid.objectName(): True for wid in self.widgets} self.setWindowTitle(window_title)