class _DetectorDialog(QDialog): def __init__(self, wdg_detector, key='', parent=None): QDialog.__init__(self, parent) self.setWindowTitle(wdg_detector.accessibleName()) # Widgets self._txt_key = QLineEdit() self._txt_key.setValidator(QRegExpValidator(QRegExp(r"^(?!\s*$).+"))) self._txt_key.setText(key) self._wdg_detector = wdg_detector buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) # Layouts layout = QFormLayout() layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow) # Fix for Mac OS layout.addRow('Key', self._txt_key) layout.addRow(self._wdg_detector) layout.addRow(buttons) self.setLayout(layout) # Signals self._txt_key.textChanged.connect(self._onChanged) self._txt_key.textChanged.emit('') buttons.accepted.connect(self._onOk) buttons.rejected.connect(self.reject) def _onChanged(self): if self._txt_key.hasAcceptableInput(): self._txt_key.setStyleSheet("background: none") else: self._txt_key.setStyleSheet("background: pink") def _onOk(self): if not self._txt_key.hasAcceptableInput(): return if not self._wdg_detector.hasAcceptableInput(): return self.accept() def key(self): return self._txt_key.text() def detector(self): return self._wdg_detector.value()
class NameWizardPage(_OptionsWizardPage): def __init__(self, options, parent=None): _OptionsWizardPage.__init__(self, options, parent) self.setTitle("Name") def _initUI(self): # Widgets self._txt_name = QLineEdit() self._txt_name.setValidator(QRegExpValidator(QRegExp(r"^(?!\s*$).+"))) # Layouts layout = _OptionsWizardPage._initUI(self) layout.addRow('Name', self._txt_name) # Signals self._txt_name.textChanged.connect(self._onNameChanged) return layout def _onNameChanged(self): if self._txt_name.hasAcceptableInput(): self._txt_name.setStyleSheet("background: none") else: self._txt_name.setStyleSheet("background: pink") def initializePage(self): name = self.options().name self._txt_name.setText(name) def validatePage(self): if not self._txt_name.hasAcceptableInput(): return False self.options().name = self._txt_name.text() return True