wxpython多线程防假死与线程间传递消息实例详解


Posted in Python onDecember 13, 2019

wxpython中启用线程的方法,将GUI和功能的执行分开。

网上关于python多线程防假死与线程传递消息是几年前的,这里由于wxpython和threading模块已经更新最新,因此给出最新修改代码,能在2017年最新版的python和模块中运行。

原来的publisher()和callafter都无法使用。

修改后的代码。

import time
import wx
from threading import Thread
from wx.lib.pubsub import pub
class TestThread(Thread):
def __init__(self):
#线程实例化时立即启动
Thread.__init__(self)
self.start()
def run(self):
#线程执行的代码
for i in range(101):
time.sleep(0.03)
wx.CallAfter(pub.sendMessage, "update", msg=i)
time.sleep(0.5)
class MyForm ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = "www.OmegaXYZ.com", pos = wx.DefaultPosition, size = wx.Size( -1,-1 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
gSizer2 = wx.GridSizer( 0, 3, 0, 0 )
self.m_button2 = wx.Button( self, wx.ID_ANY, "执行线程", wx.DefaultPosition, wx.DefaultSize, 0 )
gSizer2.Add( self.m_button2, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, "MyLabel", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText2.Wrap( -1 )
gSizer2.Add( self.m_staticText2, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.m_gauge1 = wx.Gauge( self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL )
self.m_gauge1.SetValue( 0 )
gSizer2.Add( self.m_gauge1, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
self.SetSizer( gSizer2 )
self.Layout()
gSizer2.Fit( self )
self.Centre( wx.BOTH )
self.m_button2.Bind( wx.EVT_BUTTON, self.onButton )
pub.subscribe(self.updateDisplay, "update")
def updateDisplay(self, msg):
t = msg
if isinstance(t, int):#如果是数字,说明线程正在执行,显示数字
self.m_staticText2.SetLabel("%s%%" % t)
self.m_gauge1.SetValue( t )
else:#否则线程未执行,将按钮重新开启
self.m_staticText2.SetLabel("%s" % t)
self.m_button2.Enable()
def onButton( self, event ):
TestThread()
self.m_staticText2.SetLabel("线程开始")
event.GetEventObject().Disable()
if __name__ == "__main__":
app = wx.App()
MyForm(None).Show()
app.MainLoop()

wxpython多线程防假死与线程间传递消息实例详解

以上这篇wxpython多线程防假死与线程间传递消息实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中 ? : 三元表达式的使用介绍
Oct 09 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
PyQt5实现下载进度条效果
Apr 19 Python
python实现弹窗祝福效果
Apr 07 Python
python写入文件自动换行问题的方法
Jul 05 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
python [:3] 实现提取数组中的数
Nov 27 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
python 算法题——快乐数的多种解法
May 27 Python
Python基础之条件语句详解
Jun 16 Python
Python echarts实现数据可视化实例详解
Mar 03 Python
python-web根据元素属性进行定位的方法
Dec 13 #Python
python Jupyter运行时间实例过程解析
Dec 13 #Python
Python time库基本使用方法分析
Dec 13 #Python
使用python 将图片复制到系统剪贴中
Dec 13 #Python
Python中使用gflags实例及原理解析
Dec 13 #Python
使用Python进行防病毒免杀解析
Dec 13 #Python
python 使用shutil复制图片的例子
Dec 13 #Python
You might like
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
党员承诺书内容
2014/03/26 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
预备党员个人总结
2015/02/14 职场文书
婚庆主持词大全
2015/06/30 职场文书
小学同学聚会感言
2015/07/30 职场文书
2019 入党申请书范文
2019/07/10 职场文书
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android
vscode内网访问服务器的方法
2022/06/28 Servers