我想知道为什么使用 pyqtSignal() 。 (pyqt, QThread, 信号, 插槽)

I wonder why pyqtSignal() is used. (pyqt, QThread, signal, slot)

这是QThread和Signal的测试代码

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


class Thread1(QThread):
    set_signal = pyqtSignal(int)  # (1) @@

    def __init__(self, parent):
        super().__init__(parent)

    def run(self):
        for i in range(10):
            time.sleep(1)
            self.set_signal.emit(i)   # (3) @@

class MainWidget(QWidget):
    def __init__(self):
        super().__init__()
        thread_start = QPushButton("시 작!")
        thread_start.clicked.connect(self.increaseNumber)

        vbox = QVBoxLayout()
        vbox.addWidget(thread_start)

        self.resize(200,200)
        self.setLayout(vbox)

    def increaseNumber(self):
        x = Thread1(self)
        x.set_signal.connect(self.print)  # (2) @@
        x.start()

    def print(self, number):
        print(number)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = MainWidget()
    widget.show()
    sys.exit(app.exec_())

在我搜索到的QThread的例子中,创建了一个pyqtSignal()(step 1)对象,通过connect连接(step 2)想要的slot函数,然后通过emit()调用(step 3) .

我不知道在不连接 connect() 的情况下立即调用所需方法的区别。

因此,代码的目标是每秒触发所需的功能。你说得对。

但如果您创建多个对象,您可以将其连接到不同的所需功能。或者将多个功能连接到一个信号。

x = Thread1(self)
x.set_signal.connect(self.print)  # (2) @@
x.start()

y = Thread1(self)
y.set_signal.connect(self.print2)
time.sleep(0.5)
y.start()