应用程序在发出URL请求时冻结

时间:2012-08-07 08:45:52

标签: wxpython

我正在创建一个小应用程序,我用urllib2将一些参数发送到8个不同的站点,使用命令行界面,它的工作正常,但是当我使用wxPython时,应用程序冻结并显示没有响应。同样的事情发生在我以前读过一些文件的时候,但我用wx.Yield()来阅读文件,但是看起来wx.Yield()似乎不能用于URL请求。

我正在使用BOA构造函数构建框架。

根据要点,程序是这样的:

def buildURL(url, params):
    #url built here 
    return url



def url1(self, value):
    #self.buildURL(url, params)
    #makes the request
    #searches if there was a valid response
    #if yes, show it to txtCtrl2

#same for url2 to url8

def onClickCheck(self, event):
    #get the value from txtCtrl1
    #Do the required things
    AppUrlLibrary = [self.url1(value)...self.url8(value)]
    for i in AppUrlLibrary:
        if self.abort:
            break
        else:
            wx.Yield() #this seems not working
            i

我需要一些帮助,我坚信,我的编码结构是错误的!我需要一些指导。

所有显示和响应都发送到txtCtrl2。 谢谢!

1 个答案:

答案 0 :(得分:0)

问题是你正在做的是阻止GUI的主循环。换句话说,这是一项长期运作的任务。这意味着您可能需要使用线程,队列或类似方法来解决这个问题。有3种线程安全方法:wx.CallAfter,wx.CallLater和wx.PostEvent。如果您试图在不使用线程中的任何一个的情况下与GUI通信,那么您将遇到问题。 wxPython wiki上有几个示例,或者您可以阅读我的tutorial