delayedresult使用背景介绍
在进行wxPython GUI画面编程时,如直接在画面主线程进行大量耗时计算处理,就会造成画面假死,不能响应用户输入。
使用wxPython的delayedresult模块,可轻松解决该问题,甚至都不需要了解相关线程处理机制,即可方便的把耗时处理放到单独的线程中,处理结束后把结果返回GUI画面主线程,并调用预先定义的相关处理,进行画面更新等。
为了演示delayedresult的使用情况,先新建一TestWindow框架,doSomeThing()是我们模拟进行大量耗时处理的函数。
import wx
from wx.lib.delayedresult import startWorker
import threading
class TestWindow(wx.Frame):
def __init__(self, title='Test Window'):
self.app = wx.App(False)
wx.Frame.__init__(self, None, -1, title)
panel = wx.Panel(self)
self.btnBegin = wx.Button(panel, -1, label='Begin')
self.Bind(wx.EVT_BUTTON, self.handleButton, self.btnBegin)
self.txtCtrl = wx.TextCtrl(panel, style=wx.TE_READONLY, size=(300, -1))
vsizer = wx.BoxSizer(wx.VERTICAL)
vsizer.Add(self.btnBegin, 0, wx.ALL, 5)
vsizer.Add(self.txtCtrl, 0, wx.ALL, 5)
panel.SetSizer(vsizer)
vsizer.SetSizeHints(self)
self.Show()
#处理Begin按钮事件
def handleButton(self, event):
self.workFunction()
#开始执行耗时处理,有继承类实现
def workFunction(self, *args, **kwargs):
print'In workFunction(), Thr