def __init__(self, ipcon, uid, version): PluginBase.__init__(self, ipcon, uid, 'Rotary Encoder Bricklet', version) self.re = BrickletRotaryEncoder(uid, ipcon) self.qtcb_count.connect(self.cb_count) self.re.register_callback(self.re.CALLBACK_COUNT, self.qtcb_count.emit) self.qtcb_pressed.connect(self.cb_pressed) self.re.register_callback(self.re.CALLBACK_PRESSED, self.qtcb_pressed.emit) self.qtcb_released.connect(self.cb_released) self.re.register_callback(self.re.CALLBACK_RELEASED, self.qtcb_released.emit) self.count_label = CountLabel('Count: 0') self.reset_button = QPushButton('Reset Count') self.reset_button.pressed.connect(self.reset_pressed) self.encoder_frame = EncoderFrame(self) self.encoder_frame.setMinimumSize(220, 220) self.encoder_frame.setMaximumSize(220, 220) self.encoder_frame.set_count(0) layout_h1 = QHBoxLayout() layout_h1.addStretch() layout_h1.addWidget(self.count_label) layout_h1.addStretch() layout_h2 = QHBoxLayout() layout_h2.addStretch() layout_h2.addWidget(self.encoder_frame) layout_h2.addStretch() layout_h3 = QHBoxLayout() layout_h3.addStretch() layout_h3.addWidget(self.reset_button) layout_h3.addStretch() layout = QVBoxLayout(self) layout.addLayout(layout_h1) layout.addLayout(layout_h2) layout.addLayout(layout_h3) layout.addStretch()
class RotaryEncoder(PluginBase): qtcb_count = pyqtSignal(int) qtcb_pressed = pyqtSignal() qtcb_released = pyqtSignal() def __init__(self, ipcon, uid, version): PluginBase.__init__(self, ipcon, uid, 'Rotary Encoder Bricklet', version) self.re = BrickletRotaryEncoder(uid, ipcon) self.qtcb_count.connect(self.cb_count) self.re.register_callback(self.re.CALLBACK_COUNT, self.qtcb_count.emit) self.qtcb_pressed.connect(self.cb_pressed) self.re.register_callback(self.re.CALLBACK_PRESSED, self.qtcb_pressed.emit) self.qtcb_released.connect(self.cb_released) self.re.register_callback(self.re.CALLBACK_RELEASED, self.qtcb_released.emit) self.count_label = CountLabel('Count: 0') self.reset_button = QPushButton('Reset Count') self.reset_button.pressed.connect(self.reset_pressed) self.encoder_frame = EncoderFrame(self) self.encoder_frame.setMinimumSize(220, 220) self.encoder_frame.setMaximumSize(220, 220) self.encoder_frame.set_count(0) layout_h1 = QHBoxLayout() layout_h1.addStretch() layout_h1.addWidget(self.count_label) layout_h1.addStretch() layout_h2 = QHBoxLayout() layout_h2.addStretch() layout_h2.addWidget(self.encoder_frame) layout_h2.addStretch() layout_h3 = QHBoxLayout() layout_h3.addStretch() layout_h3.addWidget(self.reset_button) layout_h3.addStretch() layout = QVBoxLayout(self) layout.addLayout(layout_h1) layout.addLayout(layout_h2) layout.addLayout(layout_h3) layout.addStretch() def cb_released(self): self.encoder_frame.set_pressed(False) def cb_pressed(self): self.encoder_frame.set_pressed(True) def cb_count(self, count): self.count_label.setText(str(count)) self.encoder_frame.set_count(count) def reset_pressed(self): async_call(self.re.get_count, True, None, self.increase_error_count) self.cb_count(0) def start(self): async_call(self.re.set_count_callback_period, 100, None, self.increase_error_count) async_call(self.re.get_count, False, self.cb_count, self.increase_error_count) def stop(self): async_call(self.re.set_count_callback_period, 0, None, self.increase_error_count) def get_url_part(self): return 'rotary_encoder' @staticmethod def has_device_identifier(device_identifier): return device_identifier == BrickletRotaryEncoder.DEVICE_IDENTIFIER