[PySide] signal connection only works with lambda

Cristián Maureira-Fredes Cristian.Maureira-Fredes at qt.io
Tue Aug 30 09:21:08 CEST 2022

On 8/30/22 00:08, Frank Rueter wrote:
> Hi all,

Hey Frank,

> probably a pre-coffee hiccup:
> I have this weird issue where my signal connection only works when 
> utilising lambda, even though the data type sent by the signal is 
> exactly what the receiving slot needs.
> This is my code:
> In a worker class (QRunnable) I emit this signal
> *    tasks_data_available = QtCore.Signal(list)
> *

Just a sanity check:
That's declared inside a class, but not inside any method, right?

> In my main widget I connect it like this:
> *        worker.tasks_data_available.connect(self.__prep_task_data)
> *
> the slot looks like this:
> *    def __prep_task_data(self, task_list):
> *
> *        print(task_list)*

Is this method decorated with a `@Slot(list)` ?

def __prep_task_data(elf, task_list):

> I have done this countless times, but for some reason in this case the 
> code never calls the slot when the QRunnable emits task_list.
> When I do this it works though:
> *        worker.tasks_data_available.connect(lambda t: 
> self.__prep_task_data(t))
> *

This might be due to the lazy registration of the lambda as a Slot,
without properly going through the Slot-registration process.

> What am I missing? I should not have to use lambda in this case.

It might be the missing @Slot,
but let me know if that's not the case.

> Cheers,
> frank


Dr. Cristián Maureira-Fredes
Senior R&D Manager

The Qt Company GmbH
Erich-Thilo-Str. 10
D-12489 Berlin

Geschäftsführer: Mika Pälsi,
Juha Varelius, Jouni Lintunen
Sitz der Gesellschaft: Berlin,
Registergericht: Amtsgericht
Charlottenburg, HRB 144331 B

More information about the PySide mailing list