aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-06-26 14:59:06 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-06-28 15:41:38 +0200
commit365bdb7fc286e273f00be687d2605e97021d18e4 (patch)
tree7f6d349180fb7ec1fdf47486f45f1342d4daf475
parentc73c656082a18893154525ec2a8474c0d421748e (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.py20
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: