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 相关文章推荐
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
Python实现遍历数据库并获取key的值
May 17 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
python导入pandas具体步骤方法
Jun 23 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python文件夹批处理操作代码实例
Jul 21 Python
python 利用zmail库发送邮件
Sep 11 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
基于tensorflow权重文件的解读
May 26 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 flv视频时间获取函数
2010/06/29 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
PHP在线生成二维码代码(google api)
2013/06/03 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
vue--vuex详解
2019/04/15 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
python删除过期log文件操作实例解析
2018/01/31 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
sklearn的predict_proba使用说明
2020/06/28 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
九年级物理教学反思
2014/01/29 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
班委竞选稿范文
2015/11/21 职场文书