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 相关文章推荐
linux系统使用python获取cpu信息脚本分享
Jan 15 Python
Python设计模式之单例模式实例
Apr 26 Python
Python pickle模块用法实例
Apr 14 Python
python django事务transaction源码分析详解
Mar 17 Python
python抓取网页中链接的静态图片
Jan 29 Python
Python 通配符删除文件的实例
Apr 24 Python
详解Django rest_framework实现RESTful API
May 24 Python
python如何制作英文字典
Jun 25 Python
linux下python中文乱码解决方案详解
Aug 28 Python
python 日志 logging模块详细解析
Mar 31 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 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
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python简单生成8位随机密码的方法
2017/05/24 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
python实现聊天小程序
2018/03/13 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
浅析matlab中imadjust函数
2020/02/27 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
自我鉴定四大框架
2014/01/17 职场文书
丽江古城导游词
2015/02/03 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
MySQL空间数据存储及函数
2021/09/25 MySQL