Ну, я писал сценарий для программного обеспечения, разработанного на Python, в котором я буду слишком часто использовать сигналы и слоты в приложении PyQt5.У меня появилась идея создать словарь, в который входят все сигналы, и каждый сигнал будет иметь свой собственный ключ для доступа (или, по сути, для подключения его к функции).Проблема в том, что я получаю эту ошибку 'AttributeError:' PyQt5.QtCore.pyqtSignal 'объект по какой-то причине не имеет атрибута' connect '.Я прочитал об этой ошибке и обнаружил, что мне нужно объявить сигналы вне конструктора, чтобы она заработала, но, к сожалению, это сломает мою идею, поэтому я пришел сюда, чтобы кто-то мог решить мою проблему.
Воткод, если вы все еще не понимаете:
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtCore import QRunnable, pyqtSlot, QThreadPool, QObject, pyqtSignal
class WorkerSignals(QObject):
signals = {}
def __init__(self, **kwargs):
QObject.__init__(self)
if (kwargs is not None):
for key, value in kwargs.items():
self.signals[key] = value
class Worker(QRunnable):
def __init__(self, fn, *args, **kwargs):
super(Worker, self).__init__()
self.fn = fn
self.args = args
self.kwargs = kwargs
@pyqtSlot()
def run(self):
self.fn(*self.args, **self.kwargs)
и пример создания сигналов:
worker_signals = WorkerSignals(result=pyqtSignal(str), error=pyqtSignal(str))
worker_signals.signals['result'].connect(self.on_receive_result)
worker_signals.signals['error'].connect(self.on_receive_error)