Как объединить несколько сигналов в композитный слот в PyQt? - PullRequest
0 голосов
/ 26 апреля 2020

Проблема описана на верхней диаграмме: считыватель читает изображение a, и два объекта P1 и P2 должны обработать эти данные изображения. Обработка в P2 включает в себя как исходное изображение a, так и вывод P1: b. И P1, и P2 расширяют QWidget, а методы - это слоты: P1.process(a) и P2.process(a, b).

Top:the problem. Bottom: attempted solution

В идеальном мире я бы хотел есть способ соединить два сигнала, a от Reader и b от P1, подключиться к двум параметрам слота (я думаю о чем-то похожем на LabView). Но похоже, что сигналы Qt и соединения слотов этого не позволяют.

В качестве обходного пути я создал фиктивный класс в качестве посредника, в котором входные данные для slot_a просто сохраняют входное значение в атрибуте dummy._a и вводят в slot_b отправляет сигнал с двумя аргументами (dummy._a, b), и он принимается P2.slot_ab(a, b), который завершил обработку в P2.

Но, очевидно, нет простого способа гарантировать, что Dummy.slot_a будет вызывается до Dummy.slot_b, поэтому значение a может не инициализироваться или устареть.

Каким будет хороший и простой способ передать a и соответствующее значение b в P2 и запустить его обработку?

Для этого я использую pyqt5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...