首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从另一个线程- PyQt向gui发送标签?

在PyQt中,可以使用信号与槽机制来实现从另一个线程向GUI发送标签的功能。下面是一个完整的示例代码:

代码语言:python
代码运行次数:0
复制
import sys
import time
from PyQt5.QtCore import Qt, QObject, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
from PyQt5.QtGui import QFont


class Worker(QObject):
    finished = pyqtSignal()
    label_updated = pyqtSignal(str)

    @pyqtSlot()
    def do_work(self):
        # 模拟耗时操作
        time.sleep(2)

        # 发送信号更新标签文本
        self.label_updated.emit("Hello from another thread!")

        # 发送信号通知工作完成
        self.finished.emit()


class GUI(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        self.setWindowTitle("Thread Communication Example")
        self.setGeometry(300, 300, 300, 200)

        self.label = QLabel("Waiting for update...", self)
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setFont(QFont("Arial", 12))

        layout = QVBoxLayout()
        layout.addWidget(self.label)

        self.setLayout(layout)

    @pyqtSlot(str)
    def update_label(self, text):
        self.label.setText(text)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    worker = Worker()
    gui = GUI()

    # 连接信号与槽
    worker.label_updated.connect(gui.update_label)
    worker.finished.connect(app.quit)

    # 启动工作线程
    worker_thread = QThread()
    worker.moveToThread(worker_thread)
    worker_thread.started.connect(worker.do_work)
    worker_thread.start()

    gui.show()

    sys.exit(app.exec_())

在这个示例中,我们创建了一个Worker类作为工作线程,其中定义了finishedlabel_updated两个信号。do_work方法模拟了一个耗时操作,并在操作完成后发送label_updated信号更新标签文本,然后发送finished信号通知工作完成。

GUI类中,我们创建了一个标签label,并定义了update_label槽函数用于更新标签文本。在init_ui方法中,我们设置了窗口的标题、大小和布局。

在主程序中,我们创建了一个QApplication实例和一个Worker实例,然后连接了worker的信号与gui的槽函数。接着,我们创建了一个QThread实例,并将worker移动到该线程中。最后,启动工作线程并显示GUI界面。

当工作线程完成操作时,会通过信号与槽机制将更新后的标签文本发送到GUI线程,并更新标签显示。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券