Объект 'PySide2.QtCore.Signal' не имеет атрибута 'connect' - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь создать собственный сигнал для объекта QRunnable для моего приложения PySide2. Все примеры привели меня к созданию сигнала следующим образом:

class Foo1(QtCore.QObject):

    def __init__():
        super().__init__()
        self.thread = Foo2()
        self.thread.signal.connect(foo)

    def foo():
        # do something


class Foo2(QtCore.QRunnable):

    signal = QtCore.Signal()

Тем не менее, я получаю следующую ошибку на self.thread.signal.connect(foo):

'PySide.QtCore.Signal' object has no attribute 'connect'

Как мне реализовать собственный сигнал для объекта QRunnable?

1 Ответ

0 голосов
/ 30 октября 2018

QRunnable не является QObject, поэтому он не может иметь сигналы, поэтому возможное решение заключается в создании класса, который предоставляет сигналы:

class FooConnection(QtCore.QObject):
    foosignal = QtCore.Signal(foo_type)

class Foo2(QtCore.QRunnable):
    def __init__(self):
        super(Foo2, self).__init__() 
        self.obj_connection = FooConnection()

    def run(self):
        # do something
        foo_value = some_operation()
        self.obj_connection.foosignal.emit(foo_value)

class Foo1(QtCore.QObject):
    def __init__():
        super().__init__()
        self.pool = Foo2()
        self.pool.obj_connection.foosignal.connect(foo)
        QtCore.QThreadPool.globalInstance().start(self.pool)

    @QtCore.Slot(foo_type)
    def foo(self, foo_value):
        # do something
...