Возможно ли передавать переменные через слоты, чтобы я мог распечатать определенный текст? Пытаюсь передать переменную 'DiffP', которая определена в другой функции, в слот.
'DiffP' изменяется в зависимости от того, какой файл выбран.
который заключается в том, что они создают ссылочный цикл: self объект содержит ссылку на (или является) объектом с сигналом, который содержит ссылку на функцию или partial объект, который содержит ссылку на self объект. Результатом является то, что (в CPython) ни один из этих объектов не будет собран мусором, когда все остальные ссылки на них исчезнут; они будут собраны только при следующем запуске сборщика циклов. Они, в свою очередь, сохранят в рабочем состоянии все остальные структуры данных Python, на которые они ссылаются, и все объекты Qt, которыми они совместно владеют. Это не совсем утечка памяти, поскольку в конечном итоге все освобождается, но это может быть проблемой.
Ссылочного цикла не будет, если вы напишете
self.whatever.connect(self.method)
поскольку как в PyQt, так и в PySide, connect имеет особый случай для объектов метода, связанных с Python: он содержит только слабую ссылку на объект "self". functools.partial не возвращает объект определенного типа, который connect распознает. Но вы можете определить замену для functools.partial, которая возвращает этот тип, так что вы получите поведение, исключающее цикл:
defpartial_bound_method(bound_method, *args, **kwargs): f = functools.partialmethod(bound_method.__func__, *args, **kwargs) # NB: the seemingly redundant lambda is needed to ensure the correct result type return (lambda *args: f(*args)).__get__(bound_method.__self__)