это простая программа о 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](https://i.stack.imgur.com/AGGjX.png)
неверный путь:
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](https://i.stack.imgur.com/iX91l.png)
полный код здесь:
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())