PyQt5 pyqt多线程操作入门

PyQt5 是一组 Python 绑定 Qt 库的 Python 模块,支持开发界面程序。通过多线程操作可以提升程序的运行效率和用户体验。以下是一份关于 PyQt5 多线程操作入门的攻略。

环境搭建

在开发 PyQt5 多线程程序前,我们需要先准备好以下两个软件的安装:

  1. Python 3.x。可前往官网下载并安装。

  2. PyQt5 模块。使用 pip 命令安装,终端输入:

pip install PyQt5

多线程操作示例

示例 1:通过继承 QThread 类实现多线程任务

import sys
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QPushButton


class MyThread(QThread):
    """自定义线程类"""
    thread_signal = pyqtSignal(int)

    def __init__(self, start=1, end=100):
        super().__init__()
        self.start_value = start
        self.end_value = end

    def run(self):
        """线程任务"""
        for i in range(self.start_value, self.end_value):
            self.thread_signal.emit(i)


class MainWindow(QMainWindow):
    """主窗口类"""
    def __init__(self):
        super().__init__()
        self.p_bar = QProgressBar(self)
        self.p_bar.setGeometry(50, 70, 200, 25)
        self.btn = QPushButton("Start", self)
        self.btn.setGeometry(80, 120, 120, 25)

        self.thread = MyThread()
        self.thread.thread_signal.connect(self.update_progress)
        self.btn.clicked.connect(self.thread.start)
        self.setGeometry(300, 300, 300, 200)

    def update_progress(self, value):
        """更新进度条"""
        self.p_bar.setValue(value)


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

该示例程序创建了一个新的线程,该线程从 start 到 end 值间的整数依次输出。点开开始按钮,线程任务在新线程中执行,同时主窗口中的进度条也会相应更新。通过这个示例,我们可以了解到,QThread 是实现线程操作的一种常用方式。

示例 2:通过继承 QObject 类实现 QObject 多线程管理

import sys
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, QThread
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QPushButton


class MyWorker(QObject):
    """基于QObject的工作进程"""
    progress_changed = pyqtSignal(int)

    @pyqtSlot()
    def do_work(self):
        """工作任务"""
        for i in range(1, 101):
            self.progress_changed.emit(i)


class MyThread(QThread):
    """基于QThread的线程类"""
    def __init__(self, worker):
        super().__init__()
        self.worker = worker

    def run(self):
        """线程任务"""
        self.worker.do_work()


class MainWindow(QMainWindow):
    """主窗口类"""
    def __init__(self):
        super().__init__()
        self.p_bar = QProgressBar(self)
        self.p_bar.setGeometry(50, 70, 200, 25)

        self.btn = QPushButton("Start", self)
        self.btn.setGeometry(80, 120, 120, 25)

        self.worker = MyWorker()

        self.thread = MyThread(self.worker)
        self.worker.progress_changed.connect(self.update_progress)
        self.btn.clicked.connect(self.thread.start)

        self.setGeometry(300, 300, 300, 200)

    def update_progress(self, value):
        """更新进度条"""
        self.p_bar.setValue(value)


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

该示例程序创建了一个新的线程,该线程启动 worker 任务,并且基于 Qt 的 QObject 类来实现报告信号和进度 moved 信号。点开开始按钮,线程任务在新线程中执行,同时主窗口中的进度条也会相应更新。通过这个示例,我们可以了解到,QObject 和 QThread 是共同实现多线程操作的最佳方式。

总结

通过上述的两个示例,我们了解并应用了 QThread 和 QObject 类多线程操作的实现方式。当我们需要同时处理和展示大量的数据时,多线程操作可以有效提高我们的程序效率和用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 pyqt多线程操作入门 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python画图常用命令大全(详解)

    Python画图常用命令大全(详解)是一篇介绍Python绘图常用命令的文章,下面我将对文章进行详细的讲解。 1. matplotlib库 matplotlib是Python中最流行的画图库之一,该库提供了丰富的绘图函数和绘图参数,可以绘制出各类图像,如线图、散点图、直方图等。 常用的matplotlib库中的函数包括: plot函数 该函数可以绘制出曲线图…

    python 2023年5月13日
    00
  • Python爬虫之Spider类用法简单介绍

    Python爬虫之Spider类用法简单介绍 Spider类是Scrapy框架中最核心的类,其主要作用是定义如何爬取某些网站,并解析网页数据。下面将介绍Spider类的一些基本用法。 前置知识 在介绍Spider类之前,我们需要了解一些Scrapy框架的基本概念: Scrapy: 一个python web爬虫框架,旨在用最少的代码便捷地爬取web站点。 Re…

    python 2023年5月13日
    00
  • 通过python爬虫mechanize库爬取本机ip地址的方法

    通过Python爬虫Mechanize库爬取本机IP地址的方法 本攻略将介绍如何使用Python爬虫Mechanize库爬取本机IP地址。Mechanize库是一个模拟浏览器行为的Python库,可以用于模拟用户在网站上的操作。以下是一个示例代码,演示如何使用Mechanize库爬取本机IP地址: import mechanize # 创建浏览器对象 bro…

    python 2023年5月15日
    00
  • 分享python数据统计的一些小技巧

    当涉及数据统计和处理时,Python是广泛使用的编程语言之一。这里介绍一些Python中一些小技巧,可以帮助你更有效地进行数据统计和分析。 1. 使用Pandas进行数据清洗和处理 Pandas是Python中用于数据处理和分析的流行库。您可以使用它来执行各种数据操作,如排序、筛选、合并和清洗。下面是一个简单的示例,演示如何使用Pandas对数据进行清洗: …

    python 2023年6月3日
    00
  • 用Python计算三角函数之atan()方法的使用

    当我们需要计算三角函数时,Python提供了一个内置的math模块,其中包括可以计算三角函数的方法,如sin(), cos(), tan()和atan()等。在本篇攻略中,我们将深入讲解如何使用Python里的atan()方法来计算反正切值。 1. atan()方法的定义 atan()是math库中的一个方法,它可以返回一个数的反正切值,其计算公式为:ata…

    python 2023年6月3日
    00
  • python读取TXT每行,并存到LIST中的方法

    以下是“Python读取TXT每行,并存到LIST中的方法”的完整攻略。 1. 读取TXT文件 在Python中,可以使用open()函数来打开一个文本文件,并使用readlines()读取文件中的所有行。 with open(‘file.txt’, ‘r’) as f: lines =.readlines() 在上面的示代码中,我们使用with语句打开名为…

    python 2023年5月13日
    00
  • 在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)

    下面是详细的攻略: 在PyCharm中遇到pip安装失败问题及解决方案 问题描述 在使用PyCharm的过程中,我们经常会使用pip命令安装所需的第三方库。但是有时会遇到pip安装失败的问题,错误信息可能包括: pip: command not found Could not find a version that satisfies the require…

    python 2023年5月14日
    00
  • Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端原文链接:Django笔记二十三之条件表达式搜索、更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回。 这个操作类似于数据库中 if elif else 的逻辑。 以下是本篇笔记的目录: model 和数据准备 When 和 Case 操作新增字段返回 条件搜索 条件更新 条件…

    python 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部