From 59fe95b9508b44256c9b79a3563faf7e1685b957 Mon Sep 17 00:00:00 2001 From: James O'SHANNESSY <12959316+joshanne@users.noreply.github.com> Date: Fri, 27 Mar 2026 19:25:25 +1100 Subject: [PATCH] ui: Migrate CheckBoxes to use binary state functions setChecked/isChecked Various points in the code make use of Tri-state functionality (ie. setCheckedState()/checkedState()). In working to migrate the tool to PyQt6, the checkedState() returns and enum, and the enum CheckedState.Unchecked is not considered Falsy. What that means is `if chkbox.checkState()` always returns True. The checkState functionality allows us to make use of a PartiallyChecked state, which is never used inside the codebase - so let's just use the binary states. --- dronecan_gui_tool/panels/esc_panel.py | 4 ++-- dronecan_gui_tool/panels/serial_panel.py | 4 ++-- dronecan_gui_tool/setup_window.py | 2 +- dronecan_gui_tool/widgets/local_node.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dronecan_gui_tool/panels/esc_panel.py b/dronecan_gui_tool/panels/esc_panel.py index 8907888..5056b99 100644 --- a/dronecan_gui_tool/panels/esc_panel.py +++ b/dronecan_gui_tool/panels/esc_panel.py @@ -314,11 +314,11 @@ def _do_broadcast(self): sl.check_fps_timeout() if not self._view_mode.isChecked(): if not self._pause.isChecked(): - if self._safety_enable.checkState(): + if self._safety_enable.isChecked(): msg = dronecan.ardupilot.indication.SafetyState() msg.status = msg.STATUS_SAFETY_OFF self._node.broadcast(msg) - if self._arming_enable.checkState(): + if self._arming_enable.isChecked(): msg = dronecan.uavcan.equipment.safety.ArmingStatus() msg.status = msg.STATUS_FULLY_ARMED self._node.broadcast(msg) diff --git a/dronecan_gui_tool/panels/serial_panel.py b/dronecan_gui_tool/panels/serial_panel.py index bf9c108..4a8c68a 100644 --- a/dronecan_gui_tool/panels/serial_panel.py +++ b/dronecan_gui_tool/panels/serial_panel.py @@ -486,7 +486,7 @@ def handle_ublox_message_out(self): def handle_ublox_data_out(self, buf): '''handle ublox data from the GPS''' - if not self.ublox_handling.checkState(): + if not self.ublox_handling.isChecked(): self.ublox_msg_out = None return if self.ublox_msg_out is None: @@ -565,7 +565,7 @@ def process_socket(self): if buf is None or len(buf) == 0: break - if self.ublox_handling.checkState(): + if self.ublox_handling.isChecked(): # we will send the data on packet boundaries self.handle_ublox_data_in(buf) else: diff --git a/dronecan_gui_tool/setup_window.py b/dronecan_gui_tool/setup_window.py index 9bb8783..e36eebc 100644 --- a/dronecan_gui_tool/setup_window.py +++ b/dronecan_gui_tool/setup_window.py @@ -274,7 +274,7 @@ def on_ok(): kwargs['baudrate'] = baud_rate_value kwargs['bitrate'] = int(bitrate.value()) kwargs['bus_number'] = int(bus_number.value()) - kwargs['filtered'] = filtered.checkState() + kwargs['filtered'] = filtered.isChecked() kwargs['mavlink_source_system'] = int(source_system.value()) kwargs['mavlink_target_system'] = int(target_system.value()) kwargs['mavlink_signing_key'] = signing_key.text() diff --git a/dronecan_gui_tool/widgets/local_node.py b/dronecan_gui_tool/widgets/local_node.py index 22c5824..73078c2 100644 --- a/dronecan_gui_tool/widgets/local_node.py +++ b/dronecan_gui_tool/widgets/local_node.py @@ -149,7 +149,7 @@ def __init__(self, parent, node): self._filtering.setTristate(False) filter_list = node.can_driver.get_filter_list() if filter_list is not None and len(filter_list) > 0: - self._filtering.setCheckState(2) + self._filtering.setChecked(True) self._filtering.stateChanged.connect(self.change_filtering) layout = QHBoxLayout(self)