diff --git a/gateway_config.py b/gateway_config.py index b28c6cd..dcad180 100644 --- a/gateway_config.py +++ b/gateway_config.py @@ -874,6 +874,7 @@ class DeviceDialog(QDialog): self._buf = "" self._pending_del = None # 等待删除结果的MAC,"all"表示删除全部 + self._parsed = False # 本次查询是否已完成解析(防止数据流中途误触发) self._quiet = QTimer(self) self._quiet.setSingleShot(True) self._quiet.timeout.connect(self._on_quiet) @@ -921,14 +922,19 @@ class DeviceDialog(QDialog): return self._buf = "" self._pending_del = None + self._parsed = False self._quiet.stop() + self.table.setRowCount(0) # 清空旧数据,避免新旧混淆 self.status_lbl.setText("查询中...") self.main.send_command("culs") - self._quiet.start(800) + self._quiet.start(1200) # 首次等待稍长,给设备响应时间 def feed_text(self, text): + # 已完成本次解析后,忽略后续到来的残留数据,直到下一次手动查询 + if self._parsed: + return self._buf += text - self._quiet.start(600) + self._quiet.start(600) # 数据流仍在到达,重置静默定时器 def _on_quiet(self): if self._pending_del is not None: @@ -944,6 +950,10 @@ class DeviceDialog(QDialog): self._pending_del = None self.query() return + # 仅解析一次:避免数据流间歇触发的中途解析把表格清零 + if self._parsed: + return + self._parsed = True self._parse_devices() def _parse_devices(self): @@ -1001,7 +1011,6 @@ class DeviceDialog(QDialog): if m: cur["online"] = m.group(1) self._fill_table(devices) - self._buf = "" def _fill_table(self, devices): self.table.setRowCount(0)