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

 更新时间:2019年12月13日 09:24:23   作者:OmegaXYZ  
今天小编就为大家分享一篇wxpython多线程防假死与线程间传递消息实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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多线程防假死与线程间传递消息实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法

    浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法

    这篇文章主要介绍了浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python Matplotlib实现三维数据的散点图绘制

    Python Matplotlib实现三维数据的散点图绘制

    这篇文章主要为大家详细介绍了Python Matplotlib实现三维数据的散点图绘制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Python科学计算环境推荐——Anaconda

    Python科学计算环境推荐——Anaconda

    最近在用Python做中文自然语言处理。使用的IDE是PyCharm。PyCharm确实是Python开发之首选,但用于科学计算方面,还略有欠缺。为此我尝试过Enthought Canopy,但Canopy感觉把问题搞得复杂化,管理Python扩展也不太方便。直到今天我发现了 Anaconda 。
    2014-06-06
  • 基于python批量处理dat文件及科学计算方法详解

    基于python批量处理dat文件及科学计算方法详解

    今天小编就为大家分享一篇基于python批量处理dat文件及科学计算方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python输出各行命令详解

    Python输出各行命令详解

    本篇文章给大家详细分析了Python输出各行命令的解释,为初学者提供详细的讲解,有兴趣的朋友参考下。
    2018-02-02
  • Python 基础教程之闭包的使用方法

    Python 基础教程之闭包的使用方法

    这篇文章主要介绍了Python 基础教程之闭包的使用方法的相关资料,希望大家通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • python 在threading中如何处理主进程和子线程的关系

    python 在threading中如何处理主进程和子线程的关系

    这篇文章主要介绍了python 在threading中如何处理主进程和子线程的关系,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python批量修改文件编码格式的方法

    python批量修改文件编码格式的方法

    这篇文章主要为大家详细介绍了python批量修改文件编码格式的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python iter()函数用法实例分析

    Python iter()函数用法实例分析

    这篇文章主要介绍了Python iter()函数用法,结合实例形式详细分析了Python iter()函数的功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-03-03
  • python实现播放音频和录音功能示例代码

    python实现播放音频和录音功能示例代码

    这篇文章主要给大家介绍了关于python播放音频和录音的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12

最新评论