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中logging模块的用法实例
Sep 29 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
python select.select模块通信全过程解析
Sep 20 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
Python 实现自动导入缺失的库
Oct 29 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
js 目录列举函数
2008/11/06 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
python 进程池pool使用详解
2020/10/15 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
用Python 执行cmd命令
2020/12/18 Python
关于旷工的检讨书
2014/02/02 职场文书
主题党日活动总结
2014/07/08 职场文书
群众路线剖析材料
2014/09/30 职场文书
关于安全的广播稿
2014/10/23 职场文书
交通事故协议书范文
2014/10/23 职场文书
小学校本教研总结
2015/08/13 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL