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多线程防假死与线程间传递消息实例详解

本文地址: http://www.cppcns.com/jiaoben/python/292668.html

wxpython多线程 假死_wxpython多线程防假死与线程间传递消息实例详解相关推荐

  1. wxpython多线程 假死_wxpython中利用线程防止假死的实现方法

    前段时间我编写了一个工业控制的软件,在使用中一直存在一个问题,就是当软件检索设备时,因为这个功能执行的时间比较长,导致GUI界面假死,让用户分辨不清楚软件到底仍在执行,还是真的挂掉了.(虽然我设计了同 ...

  2. java 线程组和线程_Java多线程 线程组原理及实例详解

    线程组 线程组可以批量管理线程和线程组对象. 一级关联 例子如下,建立一级关联. public class MyThread43 implements Runnable{ public void ru ...

  3. linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解

    linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include #include #include int main() { pid_t child_pid; /* 创建一个子进程 ...

  4. python爬虫文件下载很慢卡住线程_python爬虫多线程假死怎么解决?

    抓baidu数据,但跑不了多久就假死,无反应也不报错,初学python,搞了两礼拜没搞明白,望各位前辈指点下 #coding:utf-8 ''' 百度排名查询,代理多线程版本 ''' import S ...

  5. python 线程安全的数据类型_详解python多线程、锁、event事件机制的简单使用

    详解python多线程.锁.event事件机制的简单使用 发布时间:2020-09-25 02:04:12 来源:脚本之家 阅读:117 作者:君惜 线程和进程 1.线程共享创建它的进程的地址空间,进 ...

  6. C#多线程与UI响应 防止界面假死不响应(子线程创建的窗体获取消息响应用Application.DoEvent )

    一. 概述 在使用C#进行应用程序设计时,经常会采用多线程的方式进行一些后台任务的工作.对于不同的应用场景,使用的策略也不尽相同. 1. 后台循环任务,少量UI更新:例如批量上传文件,并提供进度.这种 ...

  7. python守护多线程_Python多线程Threading、子线程与守护线程实例详解

    线程Threading: python中多线程需要使用threading模块 线程的创建与运行: 1.直接调用threading的Thread类: 线程的创建:线程对象=thread.Thread(t ...

  8. PHP Curl多线程原理实例详解

    来源:http://www.jb51.net/article/42826.htm 给各位介绍一下Curl多线程实例与原理.不对之处请指教 相信许多人对php手册中语焉不详的curl_multi一族的函 ...

  9. python多线程threading之阻塞线程(join)线程同步和守护线程(setDaemon(True))实例详解

    一.多线程(主线程和子线程同时执行) 1.主线程是程序本身,看不到的,主线程和子线程没有依赖关系,同步执行的,若主线程先执行完,会等子线程执行完毕,程序结束 2.启动一个线程就是把一个函数传入并创建T ...

最新文章

  1. 管道:实用程序服务和数据结构
  2. SAP WM LPK1 不能把 cross-material control cycles定义成release order parts
  3. php留言板代码容易出错,制作PHP+MYSQL留言板代码出错。
  4. 广角相机app哪个比较好用_推荐一款比较好用的工作安排备忘app?
  5. 【数据结构与算法】之旋转图像的求解算法
  6. Google帮助IE浏览器实现对SVG支持
  7. 选择通过更改内容类型返回的详细程度,第二部分
  8. Ubuntu将python2.7默认更改为python3.X版本
  9. photoshop问题
  10. python中的画布控制_使按钮在画布上工作(tkinter)
  11. centos7 svn自动更新至web目录
  12. Struts2校验器(二)之注解
  13. 算法知识点——(1)特征工程
  14. VB.NET/C# Free Grid Control 免费开源表格控件 - ReoGrid 介绍(1)
  15. #4017. 复制粘贴(copypaste)
  16. 史上最全python常用英语单词,建议收藏
  17. 《郭论—捡史》郭德纲/著 读后得
  18. wxpython各种基本控件_wxpython 基本的控件
  19. 【少样本图像生成】Towards Faster And Stabilized GAN training for high-fidelity few-shot image synthesis
  20. 错误提示 - Procmon.exe - 无法找到入口(InitializeSRWLock)

热门文章

  1. chrome强制使用HSTS原理
  2. Win10 WSL adb使用
  3. start_kernel之前的调用流程(head.s)
  4. 重启framework命令及framework.jar引用
  5. linux 下 /dev和/sys/dev的区别
  6. Wpf之无法获取鼠标点击事件
  7. HLS之TS码流封装
  8. go语言学习之helloword
  9. 人脸方向学习(四):人脸关键点检测+Mobilenet_v3结构探索
  10. XUbuntu20.04开机logo定制,主题修改启动背景