wxpython后台如何更新界面信息_wxpython后台线程更新界面控件方法
在大多数的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后台如何更新界面信息_wxpython后台线程更新界面控件方法相关推荐
- 力控组态软件后台组件Ado组件的控件方法及常用命令
力控组态软件后台组件Ado组件的控件方法及常用命令 先在SQL SERVER中建立一个表Table_1,包含3个字段: d_t 日期时间型 int_1 整数型 float_1 浮点型 1.在配置> ...
- 力控报警转储 mysql_力控组态软件后台组件报警中心的控件方法
力控组态软件ForceControl V7.0后台组件报警中心的控件方法 AckGroup(int nGroup) 描述: 确认组报警 返回值: int(0 失败,1 成功 ) 参数: nGroup ...
- 自动更新统计信息的阀值——人为更新统计信息的重要性
经过一系列的Insert/Update/Delete后,统计信息可能不会是最新.如果SQL Server查询优化器在表里需要指定列的统计信息,自上次统计信息创建或更新后经历了实质的更新活动,SQL S ...
- MySQL的ADO控件_力控组态软件后台组件Ado组件的控件方法1
力控组态软件ForceControl V7.0后台组件Ado组件的控件方法1 AddNew() 函数描述: 新添加一条数据 返回值: int 0- 失败 1- 成功 参数: 无 说明: 新添加一条数据 ...
- python嵌套html开发gui_python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例...
PyQt5布局控件QFormLayout简介 QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式,主要有两列组成,第一列用于 ...
- Android eclipse实现创建水果表并添加信息,将其以ListView控件显示
Android eclipse实现创建水果表并添加信息,将其以ListView控件显示 整个程序包含:三个.java文件以及两个.xml文件 1.Fruit.java: package com.gpn ...
- python 动态调整控件大小_python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例...
PyQt5动态(可拖动控件大小)布局控件QSplitter简介 PyQt还提供了特殊的布局管理器QSplitter.它可以动态地拖动子控件之间的边界,算是一个动态的布局管理器,QSplitter允许用 ...
- wxpython后台线程更新界面控件方法
http://blog.sina.com.cn/s/blog_56146dc501009ea9.html http://www.th7.cn/Program/Python/201303/128088. ...
- wxpython界面切换_wxpython实现按钮切换界面的方法
本文实例为大家分享了wxpython按钮切换界面的具体实现代码,供大家参考,具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Fram ...
最新文章
- c语言实现线性结构(数组与链表)
- 对 android apk 进行重新签名操作
- 最长有效括按号长度(利用栈解决java语言)
- 罗辑思维在全链路压测方面的实践和工作笔记
- 由哥倫比亞預防醫學中心想到的
- Oracle中如何插入特殊字符: 和 ' (多种解决方案)
- taskspawn函数 linux,vxworks的启动任务taskSpawn
- PWN-PRACTICE-CTFSHOW-7
- Golang笔记——tcp 编程
- Linux系统超全超实惠的命令行工具
- 使用Fluent NHibernate和AngularJS的Master Chef(第1部分)ASP.NET Core MVC
- Redux-React 代码原理分析
- 安装了Python2.X和Python3.X后Python2.X IDLE打不开解决办法总结
- 使用Xshell连接Linux虚拟机
- 不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据
- Altium Designer_PCB板装配图的PDF文件输出
- MacOS 下载JDK11 Java
- ppt手动放映怎么设置_PPT如何设置幻灯片自动播放免除手动一张一张的点击
- 申论文章观点的打造技巧
- 斗地主 -(一) 如何开发斗地主