标题不一定对,
最近遇到了个问题,利用wxPython和boa画了个GUI,通过该GUi去执行一个花蛮长时间才能做完的应用,结果UI就hang住了。
这问题和我以前用C#实现的取Windows控件属性遇到的问题类似,反正就是需要用过异步调用的办法来解决这个问题
在借鉴了一些代码片段之后,我也改出了异步的调用,代码片段如下
#Boa:Frame:Frame1
import wx
import os
import subprocess
from threading import Thread
from wx.lib.pubsub import Publisher
def create(parent):
return Frame1(parent)
[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1CHECKBOX1, wxID_FRAME1CHECKBOX2,
wxID_FRAME1CHECKBOX3, wxID_FRAME1CHECKBOX4, wxID_FRAME1CHECKBOX5,
wxID_FRAME1CHECKBOX6, wxID_FRAME1CLOSEB, wxID_FRAME1PANEL1,
wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1TEXTCTRL1,
wxID_FRAME1TEXTCTRL2,
] = [wx.NewId() for _init_ctrls in range(14)]
########################################################################
class TestThread(Thread):
"""Test Worker Thread Class."""
#----------------------------------------------------------------------
def __init__(self,command):
"""Init Worker Thread Class."""
Thread.__init__(self)
self.command = command
self.start() # start the thread
#----------------------------------------------------------------------
def run(self):
"""Run Worker Thread."""
# This is the code executing in the new thread.
self.data = subprocess.Popen((self.command),stdout = subprocess.PIPE)
self.logg = self.data.stdout.read()
self.fd = open('c:\\test\\log.txt','a+')
self.fd.write(self.logg)
self.fd.close()
wx.CallAfter(Publisher().sendMessage, "update", "Test Finished!")
#---------------------------------------------------