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函数作用域的LEGB顺序
May 14 Python
深入了解Python数据类型之列表
Jun 24 Python
Python网络爬虫出现乱码问题的解决方法
Jan 05 Python
Django后台获取前端post上传的文件方法
May 28 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
python 解压pkl文件的方法
Oct 25 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
python命令行参数用法实例分析
Jun 25 Python
python程序 创建多线程过程详解
Sep 23 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
Django展示可视化图表的多种方式
Apr 08 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&&mysql)一
2006/10/09 PHP
谈谈新手如何学习PHP 默默经典版本
2009/08/04 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
JS回调函数深入理解
2019/10/16 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
用python找出那些被“标记”的照片
2017/04/20 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
应聘美工求职信
2013/11/07 职场文书
高中军训第一天感言
2014/03/06 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
实战Python爬虫爬取酷我音乐
2022/04/11 Python
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技