[PyQt] Very simple signal/slot "transference"/encapsulation?

J Barchan jnbarchan at gmail.com
Wed Jan 17 11:54:09 GMT 2018


I inherited code using a QLineEdit.  I have to change that into a (what I
call) a "composite" widget, consisting of a QWidget which holds a
QHBoxLayout which in turn holds the original QLineEdit, plus a QPushButton;
the button leads to something which can populate the QLineEdit.

I'm OK with the design, apart from signal/slot handling.  The outside world
used to go QLineEdit.editingFinished.connect(...).  To encapsulate, I'd
like it to go CompositeWidget.editingFinished.connect(...), rather than
addressing the QLineEdit directly.  So I want to simply "transfer" the
*existing* editingFinshed signal/slot from the QLineEdit to the
CompositeWidget level, "transparently".

This is for PyQt 5 only, not earlier versions.  So far I've never had to
use PyQt @ annotations (@pySignal/Slot or whatever they are), and I'm not
sure I ought need to, given the definition in QLineEdit in QtWidgets.pyi is
already as plain as

def editingFinished(self) -> None: ...

​So, given that I regard minimal code as neat/desired, what is like the
*minimum* I need to write​ to achieve this?  I will need the outside world
to be able to connect(), my widget needs to be able to emit() it (when the
user has finished interacting via the button, widget populates the QLineEdit
and needs that to raise editingFinished signal to the outside world).  I
think that's it!

-- 
Kindest,
Jonathan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20180117/d315fc3c/attachment.html>


More information about the PyQt mailing list