我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python Pyqt5多线程更新UI代码的实例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python Pyqt5多线程更新UI代码的实例分析

Python Pyqt5多线程更新UI代码的实例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

"""
在编写GUI界面中,通常用会有一些按钮,点击后触发事件,
比如去下载一个文件或者做一些操作,
这些操作会耗时,如果不能及时结束,主线程将会阻塞,
这样界面就会出现未响应的状态,因此必须使用多线程来解决这个问题。
"""

代码实例

 from PyQt5.Qt import (QApplication, QWidget, QPushButton,QThread,QMutex,pyqtSignal)import sysimport time qmut_1 = QMutex() # 创建线程锁qmut_2 = QMutex()qmut_3 = QMutex()# 继承QThreadclass Thread_1(QThread):  # 线程1    def __init__(self):        super().__init__()     def run(self):        qmut_1.lock() # 加锁        values = [1, 2, 3, 4, 5,6,7,8,9,10]        print("====     Thread_1    ====")        for i in values:            print("Thread_1:",i)            time.sleep(0.5)  # 休眠        qmut_1.unlock() # 解锁  class Thread_2(QThread):  # 线程2    _signal =pyqtSignal()    def __init__(self):        super().__init__()     def run(self):        # qmut_2.lock()  # 加锁        values = ["a", "b", "c", "d", "e","f","g","h","i","j","k"]        print("====     Thread_2    ====")        for i in values:            print("Thread_2:",i)            time.sleep(0.5)        # qmut_2.unlock()  # 解锁        self._signal.emit() class Thread_3(QThread):  # 线程2    _signal =pyqtSignal()    def __init__(self):        super().__init__()     def run(self):        qmut_3.lock()  # 加锁        values = ["a", "b", "c", "d", "e","f","g","h","i","j","k"]        print("====     Thread_3    ====")        for i in values:            print("Thread_3:",i)            time.sleep(0.5)        qmut_3.unlock()  # 解锁        self._signal.emit() #执行完毕后,释放信号 class Thread_01(QThread):  # 线程1    def __init__(self):        super().__init__()     def run(self):        values = [1, 2, 3, 4, 5]        print("====     Thread_01       ====")        for i in values:            print("Thread_01:",i)            time.sleep(0.5)  # 休眠 class Thread_02(QThread):  # 线程2    def __init__(self):        super().__init__()     def run(self):        values = ["a", "b", "c", "d", "e"]        print("====     Thread_02       ====")        for i in values:            print("Thread_02:",i)            time.sleep(0.5)  class MyWin(QWidget):    def __init__(self):        super().__init__()        # 按钮初始化        self.btn_01 = QPushButton('按钮_每点一次运行一次', self)        self.btn_01.move(80, 40)        self.btn_01.clicked.connect(self.click_01)  # 绑定槽函数         self.btn_02 = QPushButton('按钮_每点一次运行一次', self)        self.btn_02.move(80, 80)        self.btn_02.clicked.connect(self.click_02)  # 绑定槽函数         self.btn_1 = QPushButton('按钮_线程锁_多次点击,依次执行(滞后感)', self)        self.btn_1.move(80, 120)        self.btn_1.clicked.connect(self.click_1)  # 绑定槽函数         self.btn_2 = QPushButton('按钮_线程锁_收到完成信号后才能再次点击', self)        self.btn_2.move(80, 160)        self.btn_2.clicked.connect(self.click_2)  # 绑定槽函数         self.btn_3 = QPushButton('按钮_线程锁_收到完成信号后再次执行', self)        self.btn_3.move(80, 200)        self.btn_3.clicked.connect(self.click_3)  # 绑定槽函数     def click_01(self):        self.thread_01 = Thread_01()  # 创建线程        self.thread_01.start()  # 开始线程    def click_02(self):        self.thread_02 = Thread_02()  # 创建线程        self.thread_02.start()  # 开始线程     def click_1(self):        self.thread_1 = Thread_1()  # 创建线程        self.thread_1.start()  # 开始线程     def click_2(self):        self.btn_2.setEnabled(False)        self.thread_2 = Thread_2()        self.thread_2._signal.connect(self.set_btn_2) #信号连接,如果收到信号,就执行对应的函数        self.thread_2.start()     def click_3(self):        self.btn_3.setEnabled(False)        self.thread_3 = Thread_3()        self.thread_3._signal.connect(self.set_btn_3) #信号连接,如果收到信号,就执行对应的函数        self.thread_3.start()     def set_btn_2(self):        self.btn_2.setEnabled(True)     def set_btn_3(self):        self.btn_3.setEnabled(True)  if __name__ == "__main__":    app = QApplication(sys.argv)    myshow = MyWin()    myshow.setWindowTitle("多线程演示")    myshow.setMinimumHeight(500)    myshow.setMinimumWidth(500)    myshow.show()    sys.exit(app.exec_())

运行结果

====     Thread_01       ====

Thread_01: 1

Thread_01: 2

Thread_01: 3

Thread_01: 4

Thread_01: 5

====     Thread_02       ====

Thread_02: a

Thread_02: b

Thread_02: c

Thread_02: d

Thread_02: e

====     Thread_1    ====

Thread_1: 1

Thread_1: 2

Thread_1: 3

Thread_1: 4

Thread_1: 5

Thread_1: 6

Thread_1: 7

Thread_1: 8

Thread_1: 9

====     Thread_2    ====

Thread_2: a

Thread_1: 10

Thread_2: b

Thread_2: c

Thread_2: d

====     Thread_3    ====

Thread_3: a

Thread_2: e

Thread_3: b

Thread_2: f

Thread_3: c

Thread_2: g

Thread_3: d

Thread_2: h

Thread_3: e

Thread_2: i

Thread_3: f

Thread_2: j

Thread_3: g

Thread_2: k

Thread_3: h

运行过程

Python Pyqt5多线程更新UI代码的实例分析

关于Python Pyqt5多线程更新UI代码的实例分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python Pyqt5多线程更新UI代码的实例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python Pyqt5多线程更新UI代码的实例分析

Python Pyqt5多线程更新UI代码的实例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。"""在编写GUI界面中,通常用会有一些按钮,点击后触发事件,比如去下载一
2023-06-21

C#多线程死锁实例代码分析

这篇文章主要介绍“C#多线程死锁实例代码分析”,在日常操作中,相信很多人在C#多线程死锁实例代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#多线程死锁实例代码分析”的疑惑有所帮助!接下来,请跟着小编
2023-06-30

Java多线程之synchronized同步代码块的示例分析

小编给大家分享一下Java多线程之synchronized同步代码块的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 同步方法和同步块,哪种更好?同步
2023-06-29

Python程序的分支结构实例代码分析

这篇文章主要讲解了“Python程序的分支结构实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序的分支结构实例代码分析”吧!单分支结构:if 语句Python 中 i
2023-07-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录