pyqt5 QRunnable: почему этот класс не может быть реализован в QRunnable __init __ () - PullRequest
0 голосов
/ 08 декабря 2018

это простая программа о pyqt5 QRunnable.Но когда я закодировал, возникла проблема.В основном речь идет о позиции self.son = Son() в этом классе class NoQObject(QRunnable).

правильный путь:

class NoQObject(QRunnable):
    def __init__(self,x):
        super().__init__()
        self.x = x
        pass

    def run(self):
        self.son = Son()
        self.fa = Fa()
        self.fa.finished.connect(self.son.output)
        self.fa.start(self.x)

правильный вывод:

right output

неверный путь:

class NoQObject(QRunnable):
    def __init__(self,x):
        super().__init__()
        self.x = x
        self.son = Son()
        pass

    def run(self):

        self.fa = Fa()
        self.fa.finished.connect(self.son.output)
        self.fa.start(self.x)

неправильный вывод:

wrong output

полный код здесь:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys

class Son(QObject):
    def __init__(self):
        super().__init__()

    @pyqtSlot(int)
    def output(self, x):
        print(x)

class Fa(QObject):
    finished = pyqtSignal(int)
    def __init__(self):
        super().__init__()

    def start(self, x):
        self.finished.emit(x)

class NoQObject(QRunnable):
    def __init__(self,x):
        super().__init__()
        self.x = x
        pass

    def run(self):
        self.son = Son()
        self.fa = Fa()
        self.fa.finished.connect(self.son.output)
        self.fa.start(self.x)

class MainUi(QObject):
    start = pyqtSignal(int)
    def __init__(self):
        super().__init__()
        self.son = Son()
        self.pool = QThreadPool()
        pass
    def press(self):
        for i in range(10):
            self.noqobject = NoQObject(i)
            self.pool.start(self.noqobject)
        self.pool.waitForDone()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = MainUi()
    form.press()
    sys.exit(app.exec())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...