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获取各操作系统硬件信息的方法
Jun 03 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
Python使用numpy实现BP神经网络
Mar 10 Python
python实现图片文件批量重命名
Mar 23 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
np.dot()函数的用法详解
Jan 17 Python
Python中内建模块collections如何使用
May 27 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
utf8的编码算法 转载
2006/12/27 Javascript
asp批量修改记录的代码
2008/06/25 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
javaScript中slice函数用法实例分析
2015/06/08 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python使用psutil模块获取系统状态
2016/08/27 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
python实现移动木板小游戏
2020/10/09 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
尊老爱幼演讲稿
2014/09/04 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
党员批评与自我批评
2014/10/15 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
小鞋子观后感
2015/06/05 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
python Django框架快速入门教程(后台管理)
2021/07/21 Python