def __init__(self, settings: QSettings) -> None: QGroupBox.__init__(self) _ChannelSettings.__init__(self) self.setTitle( self.tr('Enabled' )) # cannot use `tr` in `__init__` parameters with PySide2 self.settings: QSettings = settings settings_length: Final[int] = self.settings.beginReadArray( 'channelSettings') self._index: Final[int] = ChannelSettings._count self.settings.setArrayIndex(self._index) self.setCheckable(True) try: self.setChecked( self._count < settings_length and cast(bool, self.settings.value('enabled', False, bool))) except SystemError: self.setChecked(False) self.toggled.connect(self.on_toggled) self.combo_range: ComboBox = ComboBox(self, items={ self.tr('±10 V'): 0, self.tr('±5 V'): 1, self.tr('±2 V'): 2, self.tr('±1 V'): 3, self.tr('±0.5 V'): 4, self.tr('±0.2 V'): 5 }) try: if self._count < settings_length: self.combo_range.setValue(self.settings.value('range', 0, int)) except SystemError: pass self.combo_range.currentIndexChanged.connect( self.on_combo_range_changed) self.range = self.combo_range.value() self.combo_mode: ComboBox = ComboBox( self, items={ self.tr('Differential'): 0, self.tr('Channels 1 to 16 with common GND'): 1, self.tr('Channels 16 to 32 with common GND'): 2, self.tr('Grounded ADC'): 3 }) try: if self._count < settings_length: self.combo_mode.setValue(self.settings.value('mode', 0, int)) except SystemError: pass self.combo_mode.currentIndexChanged.connect(self.on_combo_mode_changed) self.mode = self.combo_mode.value() self.spin_channel: QSpinBox = QSpinBox(self) if self.mode == 2: self.spin_channel.setRange(17, 32) else: self.spin_channel.setRange(1, 16) try: if self._count < settings_length: self.spin_channel.setValue( cast(int, self.settings.value('channel', 0, int)) + 1) except SystemError: pass self.spin_channel.valueChanged.connect(self.on_spin_channel_changed) self.physical_channel = self.spin_channel.value() - 1 self.spin_averaging: QSpinBox = QSpinBox(self) self.spin_averaging.setRange(1, 128) try: if self._count < settings_length: self.spin_averaging.setValue( cast(int, self.settings.value('averaging', 1, int))) except SystemError: pass self.spin_averaging.valueChanged.connect( self.on_spin_averaging_changed) self.averaging = self.spin_averaging.value() self.setLayout(QFormLayout()) layout: QFormLayout = cast(QFormLayout, self.layout()) layout.addRow(self.tr('Range:'), self.combo_range) layout.addRow(self.tr('Channel:'), self.spin_channel) layout.addRow(self.tr('Mode:'), self.combo_mode) layout.addRow(self.tr('Averaging:'), self.spin_averaging) r: int for r in range(layout.rowCount()): layout.itemAt( r, QFormLayout.ItemRole.LabelRole).widget().setSizePolicy( QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) layout.itemAt( r, QFormLayout.ItemRole.LabelRole).widget().setAlignment( Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) self.settings.endArray() ChannelSettings._count += 1