我想知道为什么使用 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()
这是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()