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中的Numeric包和Numarray包使用教程
Apr 13 Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 Python
python 调用HBase的简单实例
Dec 18 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
python实现聊天小程序
Mar 13 Python
python使用knn实现特征向量分类
Dec 26 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
Python队列RabbitMQ 使用方法实例记录
Aug 05 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
在python image 中实现安装中文字体
May 16 Python
python opencv通过4坐标剪裁图片
Jun 05 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使用sql数据库 获取字段问题介绍
2013/08/12 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
django实现分页的方法
2015/05/26 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
如何使用python进行pdf文件分割
2019/11/11 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
国际贸易专业个人鉴定
2014/02/22 职场文书
园林技术专业求职信
2014/07/28 职场文书
个人典型事迹材料
2014/12/30 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
JAVA API 实用类 String详解
2021/10/05 Java/Android