http://blog.sina.com.cn/s/blog_56146dc501009ea9.html

http://www.th7.cn/Program/Python/201303/128088.shtml

http://blog.donews.com/limodou/archive/2005/08/15/509966.aspx

在大多数的GUI应用程序中,在应用程序的后台中长期执行一个处理过程而不干涉用户与应用程序的其它部分的交互是有好处的。允许后台处理的机制通常是产生一个线程并在该线程中长期执行一个处理过程。对于wxPython的多线程有两点需要特别说明。

最重要的一点是,GUI的操作必须发生在主线程或应用程序的主循环所处的地方中。在一个单独的线程中执行GUI操作对于无法预知的程序崩溃和调试来说是一个好的办法。基于技术方面的原因,如许多Unix的GUI库不是线程安全性的,以及在微软Windows下UI对象的创建问题,wxPython没有设计它自己的发生在多线程中的事件,所以我们建议你也不要尝试。如果你在更新UI界面时不使用,那么你可能会遇到奇怪的问题。有时GUI也忙运行挺正常,有时却会无缘无故的崩溃。上面的禁令包括与屏幕交互的任何项目,尤其包括wx.Bitmap对象。

对于wxPython应用程序,关于所有UI的更新,后台线程只负责发送消息给UI线程,而不关心GUI的更新。幸运的是,wxPython没有强制限定你能够有的后台线程的数量。\

最常用的技术是使用wx.CallAfter()函数,wxPython的全局函数wx.CallAfter(),该函数是传递消息给你的主线程的最容易的方法。wx.CallAfter()使得主线程在当前的事件处理完成后,可以对一个不同的线程调用一个函数。传递给wx.CallAfter()的函数对象总是在主线程中被执行。

#执行测试并把执行过程打印到日志监控界面

def runSuit(self,event):

#在这里创建一个后台线程

thread.start_new_thread(runSuitFunc,(self,self.logText,self.selected,self.panel))

#使用后台线程调用RunTest.runSuit1执行测试并监测执行过程,并生成测试报告

defrunSuitFunc(self,logText,suitSelected,panel):

testsuit=RunTest.runSuit1(suitSelected,logText)

gbReport=GbReport.GbReport()

RES=gbReport.generateHtmlReport(testsuit)

#GUI的更新必须在主循环处进行,使用wx.CallAfter来达到这个目的

wx.CallAfter(self.generateFigure,RES,self.panel)

thread.exit_thread()

#显示测试结果统计信息和统计图,更新GUI,这个函数是在主循环中进行的

def generateFigure(self,testRes,panel):

#在左侧显示测试执行结果统计信息

font=wx.Font(9,wx.DEFAULT,wx.NORMAL,wx.BOLD)

resStr="用例集总共用例数:"+str(testRes[1])

print resStr

self.totalSuitText=wx.StaticText(self.panel,-1,resStr,(20,250))

self.totalSuitText.SetFont(font)

resStr="执行成功用例个数:"+str(testRes[2])

self.successSuitText=wx.StaticText(self.panel,-1,resStr,(20,280))

self.successSuitText.SetFont(font)

resStr="不存在的用例个数:"+str(testRes[3])

self.failSuitText=wx.StaticText(self.panel,-1,resStr,(20,310))

self.failSuitText.SetFont(font)

resStr="执行失败用例个数:"+str(testRes[4])

self.notexistSuitText=wx.StaticText(self.panel,-1,resStr,(20,340))

self.notexistSuitText.SetFont(font)

#在右侧显示测试执行结果统计图

figPath=testRes[0]

img1 = wx.Image(figPath,wx.BITMAP_TYPE_ANY)

w = img1.GetWidth()

h = img1.GetHeight()

img1 = img1.Scale(w/2,h/2)

img1 = img1.ConvertToBitmap()

wx.StaticBitmap(self.panel,-1,img1,(160,225),(w/2,h/2))

self.panel.Refresh()

wxpython后台线程更新界面控件方法相关推荐

  1. wxpython后台如何更新界面信息_wxpython后台线程更新界面控件方法

    在大多数的GUI应用程序中,在应用程序的后台中长期执行一个处理过程而不干涉用户与应用程序的其它部分的交互是有好处的.允许后台处理的机制通常是产生一个线程并在该线程中长期执行一个处理过程.对于wxPyt ...

  2. java 线程访问控件_C#多线程与跨线程访问界面控件的方法

    本文实例讲述了C#多线程与跨线程访问界面控件的方法.分享给大家供大家参考.具体分析如下: 在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象.启用新线程去访问Web ...

  3. C# Winform 跨线程更新UI控件常用方法汇总(多线程访问UI控件)

    概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现"线程间操作无效: 从不是创建控件的线程访问它"的异常.处理跨线程更新Winform UI控件常用 ...

  4. c#后台线程更新界面

    参考文章<C# 线程更新UI界面> 主窗口 public frmMain(){InitializeComponent();}/// <summary>/// 主窗口加载事件// ...

  5. InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)

    http://bbs.csdn.net/topics/390162519 事实上,本文内容很简单且浅显,所以取消前戏,直接开始.. 源代码:在本文最后 这里是一张动画,演示在多线程(无限循环+Thre ...

  6. 【转】VC 多线程中控制界面控件的几种方法

    原文网址:https://software.intel.com/zh-cn/blogs/2010/11/30/vc-3 为了保证界面的用户体验经常要把数据处理等放到子线程中进行,然后把结果更新到主界面 ...

  7. VC多线程中控制界面控件的几种方法

    为了保证界面的用户体验经常要把数据处理等放到子线程中进行,然后把结果更新到主界面,通常有这样几种方法. 1.启动线程时把控件关联变量的指针传参给线程函数,这种方法无疑是最简单的方法,但极容易造成访问异 ...

  8. android线程改变布局,Android线程中设置控件的值提示报错的解决方法

    本文实例讲述了Android线程中设置控件的值提示报错的解决方法.分享给大家供大家参考,具体如下: 在Android线程中设置控件的值一般会与Handler联合使用,如下: package com.y ...

  9. 力控组态软件后台组件Ado组件的控件方法及常用命令

    力控组态软件后台组件Ado组件的控件方法及常用命令 先在SQL SERVER中建立一个表Table_1,包含3个字段: d_t 日期时间型 int_1 整数型 float_1 浮点型 1.在配置> ...

最新文章

  1. ssm 使用中的一些问题
  2. 数据段描述符和代码段描述符(一)——《x86汇编语言:从实模式到保护模式》读书笔记10
  3. 防火墙(7)——禁止具体协议
  4. JAVA 的普通加法运算
  5. 总结 一下UML 类图的关系
  6. P2000-拯救世界【生成函数,NTT】
  7. python文字游戏 生成数字菜单_python自学日记5——文字游戏
  8. Java 常用对象-StringBuffer类
  9. android RadioGroup中设置selector后出现多个别选中的RadioButton的解决办法
  10. c语言怎么加分数,用C语言编程平均分数
  11. azure web应用部署_使用Visual Studio Code将Python应用程序部署到Azure Functions
  12. [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
  13. 大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低平 每日一题--2020049--
  14. DDD之实体与值对象区别
  15. 睿企管家成功入驻航天云网 助力160万云网企业用户数字化转型
  16. redis主从配置(一主多从)
  17. MySQL锁表解决方法(转)
  18. HTML5+CSS3快速入门每日一篇网页制作实战(附代码)DAY06-DAY07
  19. 在win10系统中安装Visual C++ 6.0的具体方法
  20. NYOJ 1253 Turing equation (第七届河南省赛)

热门文章

  1. 《送元二使安西》 王维渭城朝雨浥轻尘,客舍清清柳色新。劝君更尽一杯酒,西出阳关无故人。英文
  2. 福州市仓山区融丰锦秀山庄别墅设计
  3. 常见的五种神经网络(4)-深度信念网络(下)篇之深度信念网络的原理解读、参数学习
  4. mysql数据库用sql语句在指定的一个字段后面添加一个字段
  5. 最新WordPress二次元博客主题Sakurairo模板源码+多彩且实用
  6. 夕阳无限好 只是近黄昏
  7. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——3.2 动态数据流...
  8. SVN版本冲突原因以及详细解决办法
  9. 三值的排序 Sorting a Three-Valued Sequence(洛谷 P1459)
  10. Error creating bean with name ‘sqlSessionFactory‘ defined in class path reso