pyqt5 通过点击按钮向QThread中传入参数,然后在QThread中print传入的参数
时间: 2023-05-28 20:03:55 浏览: 117
实现方法如下:
```python
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Worker(QThread):
signal = pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
def run(self):
self.signal.emit("Starting thread...")
# 执行一些任务
self.signal.emit("Task done.")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.worker = Worker()
self.worker.signal.connect(self.on_thread_signal)
self.button = QPushButton("Start thread", self)
self.button.clicked.connect(self.start_thread)
self.text_edit = QTextEdit(self)
self.setCentralWidget(self.text_edit)
def start_thread(self):
self.worker.start()
def on_thread_signal(self, message):
self.text_edit.append(message)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个例子中,我们创建了一个`Worker`类,它继承自`QThread`。`Worker`类有一个信号`signal`,用于在线程中发送消息给主线程。在`run()`方法中,我们调用`emit()`方法发送一些消息。
在`MainWindow`类中,我们创建了一个`Worker`对象,并将其与一个`QPushButton`对象和一个`QTextEdit`对象关联。当用户单击按钮时,我们调用`start()`方法启动线程。我们还实现了一个`on_thread_signal()`槽函数,它用于接收来自线程的消息,并将其附加到`QTextEdit`对象中。
在这个例子中,我们没有向线程中传递任何参数,但是我们可以在`Worker`类中添加一个成员变量,用于保存传递给线程的参数。然后在`run()`方法中打印该参数即可。在`MainWindow`类中,我们可以在单击按钮时将参数传递给线程。例如,我们可以将以下代码添加到`MainWindow`类的`start_thread()`方法中:
```python
self.worker.param = "Hello, World!"
```
然后在`Worker`类的`run()`方法中,我们可以这样打印参数:
```python
print(self.param)
```
阅读全文