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 相关文章推荐
windows下python连接oracle数据库
Jun 07 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
python2与python3共存问题的解决方法
Sep 18 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
对python文件读写的缓冲行为详解
Feb 13 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 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取整的几种方式
2013/06/25 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
简单的JavaScript互斥锁分享
2014/02/02 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
python em算法的实现
2020/10/03 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
职高毕业生自我鉴定
2013/10/21 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
茶叶生产计划书
2014/01/10 职场文书
社区安全检查制度
2014/02/03 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
css3应用示例:新增的选择器
2022/03/16 HTML / CSS
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python