pyqt5中QThread在使用时出现重复emit的实例


Posted in Python onJune 21, 2019

在PyQt5中使用QThread的时候,要注意把所有QThread的对象在主类中的init(或者放在所有类函数的外面)中进行实例化,不然可能在多个QThread互相调用的时候,emit重复的信号。一般比较正确的写法如下所示,基本照着这种框架搭建都是没问题的。

# -*- coding: utf-8 -*-
import sys
import time
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
 
 
class MainUi(QWidget):
  def __init__(self):
    super(MainUi, self).__init__()
    self.resize(400, 200)
    self.setWindowTitle('QThread例子')
 
    # 实例化多线程对象
    self.thread = Worker()
 
    # 实例化列表控件与按钮控件
    self.listFile = QListWidget()
    self.btnStart = QPushButton('开始')
    self.btn_over = QPushButton('结束')
 
    # 把控件放置在栅格布局中
    layout = QGridLayout(self)
    layout.addWidget(self.listFile, 0, 0, 1, 2)
    layout.addWidget(self.btnStart, 1, 0)
    layout.addWidget(self.btn_over, 1, 1)
 
    # 信号与槽函数的连接
    self.btnStart.clicked.connect(self.slotStart)
    self.btn_over.clicked.connect(self.slot_btn_over)
 
    # 建立线程信号的槽连接
    self.thread.trigger.connect(self.slotAdd)
 
  def slotAdd(self, msg):
    print(msg)
    if int(msg) % 2 == 0:
      self.listFile.addItem(msg)
    else:
      pass
    self.thread.exit()
 
  def slotStart(self):
    self.btnStart.setEnabled(False)
    self.thread.start()
 
  def slot_btn_over(self):
    self.btnStart.setEnabled(True)
    self.thread.terminate()
    self.thread.num = 0
 
 
class Worker(QThread):
  trigger = pyqtSignal(str)
  num = 0
 
  def __init__(self):
    super(Worker, self).__init__()
 
  def run(self):
    while True:
      print('num= ', self.num)
      if self.num % 2 == 0:
        self.trigger.emit(str(50))
      elif self.num == 200:
        self.num = 0
      else:
        pass
      time.sleep(0.1)
      self.num += 1
 
 
if __name__ == '__main__':
  app = QApplication(sys.argv)
  w = MainUi()
  w.show()
  sys.exit(app.exec_())

以上这篇pyqt5中QThread在使用时出现重复emit的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python库urllib与urllib2主要区别分析
Jul 13 Python
Python contextlib模块使用示例
Feb 18 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
深入探究Django中的Session与Cookie
Jul 30 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
浅谈Python traceback的优雅处理
Aug 31 Python
python学生信息管理系统(初级版)
Oct 17 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
python打印异常信息的两种实现方式
Dec 24 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 #Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 #Python
django框架使用orm实现批量更新数据的方法
Jun 21 #Python
python字典改变value值方法总结
Jun 21 #Python
python如何以表格形式打印输出的方法示例
Jun 21 #Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 #Python
对pyqt5之menu和action的使用详解
Jun 20 #Python
You might like
MySQL修改密码方法总结
2008/03/25 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
PDO::commit讲解
2019/01/27 PHP
JavaScript Eval 函数使用
2010/03/23 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
Vue组件开发初探
2017/02/14 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
Python实现的简单发送邮件脚本分享
2014/11/07 Python
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
为数据库创建索引都需要注意些什么
2012/07/17 面试题
新闻专业个人求职信
2013/12/19 职场文书