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 相关文章推荐
动态创建类实例代码
Oct 07 Python
python中enumerate函数用法实例分析
May 20 Python
python使用PIL模块实现给图片打水印的方法
May 22 Python
python基本语法练习实例
Sep 19 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
python selenium 弹出框处理的实现
Feb 26 Python
python编写计算器功能
Oct 25 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 Python
python库sklearn常用操作
Aug 23 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中鲜为人知的10个函数
2014/02/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php实现异步数据调用的方法
2015/12/24 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
Python logging模块原理解析及应用
2020/08/13 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
会话Bean的种类
2013/11/07 面试题
函授毕业个人自我评价
2014/02/20 职场文书
Python基础之Socket通信原理
2021/04/22 Python
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android