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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
Python中字符串的处理技巧分享
Sep 17 Python
Python引用计数操作示例
Aug 23 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
python print出共轭复数的方法详解
Jun 25 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
如何提高python 中for循环的效率
Apr 15 Python
Python urllib.request对象案例解析
May 11 Python
pytorch 常用函数 max ,eq说明
Jun 28 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
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
javascript 对象的定义方法
2007/01/10 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
使用jquery获取url及url参数的简单实例
2016/06/14 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
详解react-redux插件入门
2018/04/19 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
浅谈Python peewee 使用经验
2017/10/20 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
python中time.ctime()实例用法
2021/02/03 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
市场营销专业个人求职信范文
2013/12/14 职场文书
大学总结自我鉴定
2014/01/18 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
留学推荐信怎么写
2015/03/26 职场文书
大学生实习推荐信
2015/03/27 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android