diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-06-26 14:59:06 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-06-28 15:41:38 +0200 |
| commit | 365bdb7fc286e273f00be687d2605e97021d18e4 (patch) | |
| tree | 7f6d349180fb7ec1fdf47486f45f1342d4daf475 | |
| parent | c73c656082a18893154525ec2a8474c0d421748e (diff) | |
ModBus client example: Avoid keeping a reference to the QModbusReply in signal handling
Use QObject.sender() instead of functools.partial to retrieve the reply.
The callable stored in the signal manager then no longer references it.
Pick-to: 6.7
Task-number: PYSIDE-2793
Change-Id: I43e9f393a7291944da0a7b0b310f8ff889d7906e
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
| -rw-r--r-- | examples/serialbus/modbus/modbusclient/mainwindow.py | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/examples/serialbus/modbus/modbusclient/mainwindow.py b/examples/serialbus/modbus/modbusclient/mainwindow.py index d88341b51..052b7faa8 100644 --- a/examples/serialbus/modbus/modbusclient/mainwindow.py +++ b/examples/serialbus/modbus/modbusclient/mainwindow.py @@ -2,14 +2,12 @@ # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause from __future__ import annotations -import functools from enum import IntEnum from PySide6.QtCore import QUrl, Slot from PySide6.QtGui import QStandardItemModel, QStandardItem from PySide6.QtWidgets import QMainWindow -from PySide6.QtSerialBus import (QModbusDataUnit, - QModbusDevice, QModbusReply, +from PySide6.QtSerialBus import (QModbusDataUnit, QModbusDevice, QModbusRtuSerialClient, QModbusTcpClient) from ui_mainwindow import Ui_MainWindow @@ -189,7 +187,7 @@ class MainWindow(QMainWindow): self.ui.serverEdit.value()) if reply: if not reply.isFinished(): - reply.finished.connect(functools.partial(self.onReadReady, reply)) + reply.finished.connect(self.onReadReady) else: del reply # broadcast replies return immediately else: @@ -197,7 +195,8 @@ class MainWindow(QMainWindow): self.statusBar().showMessage(message, 5000) @Slot() - def onReadReady(self, reply): + def onReadReady(self): + reply = self.sender() if not reply: return @@ -249,13 +248,16 @@ class MainWindow(QMainWindow): # broadcast replies return immediately reply.deleteLater() else: - reply.finished.connect(functools.partial(self._write_finished, reply)) + reply.finished.connect(self._write_finished) else: message = "Write error: " + self._modbus_device.errorString() self.statusBar().showMessage(message, 5000) - @Slot(QModbusReply) - def _write_finished(self, reply): + @Slot() + def _write_finished(self): + reply = self.sender() + if not reply: + return error = reply.error() if error == QModbusDevice.ProtocolError: e = reply.errorString() @@ -290,7 +292,7 @@ class MainWindow(QMainWindow): self.ui.serverEdit.value()) if reply: if not reply.isFinished(): - reply.finished.connect(functools.partial(self.onReadReady, reply)) + reply.finished.connect(self.onReadReady) else: del reply # broadcast replies return immediately else: |
