欢迎访问宙启技术站
智能推送

使用QApplication()在Python中创建多线程GUI应用程序

发布时间:2023-12-17 07:12:37

在Python中使用QApplication可以创建多线程的GUI应用程序。QApplication是Qt框架提供的一个类,用于管理应用程序的运行环境。下面是一个使用QApplication创建多线程GUI应用程序的例子。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QMessageBox
from PyQt5.QtCore import QThread


class WorkerThread(QThread):
    def run(self):
        # 在这里执行耗时的任务
        # 例如计算、网络请求等
        self.sleep(5)
        self.finished.emit()


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('多线程GUI应用程序')
        self.layout = QVBoxLayout()

        self.label = QLabel('等待任务执行')
        self.layout.addWidget(self.label)

        self.button = QPushButton('开始')
        self.button.clicked.connect(self.start_thread)
        self.layout.addWidget(self.button)

        self.setLayout(self.layout)

    def start_thread(self):
        self.label.setText('任务正在执行')
        self.button.setEnabled(False)

        self.thread = WorkerThread()
        self.thread.finished.connect(self.thread_finished)
        self.thread.start()

    def thread_finished(self):
        self.label.setText('任务已完成')
        self.button.setEnabled(True)


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

在上面的例子中,我们创建了一个WorkerThread类,继承自QThread。在WorkerThreadrun方法中,我们可以执行耗时的任务,例如计算、网络请求等。在这个例子中,我们简单地使用self.sleep(5)来模拟耗时的任务。

MainWindow类中,我们创建了一个布局,并添加了一个标签和一个按钮。点击按钮时,我们会开始执行耗时的任务。在任务执行过程中,标签显示"任务正在执行",按钮变为不可用状态,以避免重复点击。任务完成后,标签显示"任务已完成",按钮恢复可用状态。

最后,我们创建了一个QApplication对象,将主窗口显示出来,并启动应用程序的事件循环。在事件循环中,Qt会处理各种事件,包括GUI事件、定时器事件等。

通过以上的例子,我们可以看到,在Python中使用QApplication可以轻松地创建多线程的GUI应用程序。