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中unittest用法实例
Sep 25 Python
Python AES加密模块用法分析
May 22 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
python统计多维数组的行数和列数实例
Jun 23 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
python pytest进阶之fixture详解
Jun 27 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
python从PDF中提取数据的示例
Oct 30 Python
python实现求纯色彩图像的边框
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中数据的批量导入(csv文件)
2006/10/09 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
python分析作业提交情况
2017/11/22 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python实现接口并发测试脚本
2019/06/25 Python
手写一个python迭代器过程详解
2019/08/27 Python
为什么说python适合写爬虫
2020/06/11 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
个人求职信范文分享
2013/12/13 职场文书
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
教师新年寄语
2014/04/03 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
幼儿教师辞职信
2015/02/27 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android