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访问系统环境变量的方法
Apr 29 Python
python中的set实现不重复的排序原理
Jan 24 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
Python中使用gflags实例及原理解析
Dec 13 Python
python实现在一个画布上画多个子图
Jan 19 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
Python pymysql模块安装并操作过程解析
Oct 13 Python
Python可视化工具如何实现动态图表
Oct 23 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 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
PHP中一个控制字符串输出的函数
2006/10/09 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
js 函数性能比较方法
2020/08/24 Javascript
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
客服专员岗位职责
2014/02/28 职场文书
运动会加油稿100字
2014/09/19 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
公开致歉信
2019/06/24 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android