当前位置: 首页 > news >正文

wxPython,线程中修改UI的方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

wxPython中,启用多线程,线程中需要修改UI方法,要使用wx.CallAfter+PubSub向主线程发送消息,主线程中,使用Publisher().subscribe接受消息,并进行处理。代码如下:
多线程中发送消息:

#发送事件,msg为传递的参数
#假如不需要传递参数后面无需加msg参数
wx.CallAfter(pub.sendMessage, "update",msg ='something')

在窗体初始化的语句中,进行注册接收:

#注册
pub.subscribe(self.updateHandle, "update")
#处理的方法 msg为线程中传递的参数,假如线程中没有传递参数,方法不需要加msg参数
def updateHandle(self,msg):
    id = msg #部分文章写的是:msg.data,不过我试了,直接接收msg就行了
    

 

可能出现的问题:
1.ImportError: cannot import name Publisher

出现这个错误是正常的,我们进入wx.lib.pubsub这个模块发现并没有Publisher这个类,但是我们在wx.lib.pubsub这个模块下面的pub模块发现了Publisher的影子,原来在2.8版本时已经将这个类私有化了,见126行,_publisher = _Publisher(),同时将Publisher的subscribe与sendMessage复制给了subscribe与sendMessage变量见(128,131)行。所以我们这样引入头:from wx.lib.pubsub import pub,同时将所有的Publisher()改为pub。

2.TypeError: sendMessage() takes exactly 2 arguments (3 given)

通过查看源代码发现,sendMessage方法第二个参数应该传个字典类型(**kwargs)。部分文章使用的版本比老,直接传递了普通的参数,没有用字典的形式传递参数,应该改为wx.CallAfter(pub.sendMessage,"update",msg="Threadfinished!")。此处应该可以传递一个字典,通过字典传递多个参数给UI线程。不过我没试验。

部分方案参考:https://www.cnblogs.com/hhudaqiang/p/6548560.html

转载于:https://my.oschina.net/u/2396236/blog/1616148

相关文章:

  • 交叉熵代价函数——当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢...
  • nxn随机矩阵乘以概率向量依旧是概率向量
  • Yii2 如何关闭debug
  • 渗透测试流程
  • MapReduce数据筛选
  • free()
  • 【转载】TCP协议要点和难点全解
  • 技术开发人员也得有点儿傍身的大数据技能!
  • odoo开发笔记--odoo可用小图标
  • mysql修改表、字段、库的字符集
  • node.js中的流
  • realm vs. domain
  • 如何生成安全的密码 Hash:MD5, SHA, PBKDF2, BCrypt 示例
  • 千兆级LTE的一小步,5G之路的一大步
  • AWS学习笔记(二)--CLI管理Image,Instance,Snapshot,S3
  • 2017前端实习生面试总结
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Apache的80端口被占用以及访问时报错403
  • Django 博客开发教程 16 - 统计文章阅读量
  • Effective Java 笔记(一)
  • HTML中设置input等文本框为不可操作
  • IOS评论框不贴底(ios12新bug)
  • JAVA多线程机制解析-volatilesynchronized
  • Magento 1.x 中文订单打印乱码
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • php的插入排序,通过双层for循环
  • 大数据与云计算学习:数据分析(二)
  • - 概述 - 《设计模式(极简c++版)》
  • 基于axios的vue插件,让http请求更简单
  • 简析gRPC client 连接管理
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 类orAPI - 收藏集 - 掘金
  • 前端之React实战:创建跨平台的项目架构
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 算法-插入排序
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • Prometheus VS InfluxDB
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云服务器如何修改远程端口?
  • ​马来语翻译中文去哪比较好?
  • !!java web学习笔记(一到五)
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net Application的目录
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [ 转载 ] SharePoint 资料