2012-08-07 40 views
0

我做了一个小应用程序,其中我用urllib2发布一些参数到8个不同的站点,命令行接口,其工作正常,但同样的事情,当我用wxPython,应用程序冻结和显示没有响应。当我用来读取一些文件时发生了同样的事情,但我克服了它与wx.Yield()读取文件,但似乎wx.Yield()不适用于URL请求。申请冻结时提出的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。 谢谢!

回答

0

问题是,你正在做的是阻止GUI的主循环。换句话说,这是一个长期运行的任务。这意味着你可能需要使用线程,队列或类似的东西来解决这个问题。有3个线程安全的方法:wx.CallAfter,wx.CallLater和wx.PostEvent。如果您尝试与您的GUI进行交谈而不使用某个线程中的某一个,那么您将遇到问题。在wxPython wiki上有几个例子,或者您可以阅读我的tutorial

+0

感谢您的回复..我会检查教程..我尝试了谷歌搜索,但没有找到合适的例子..我会检查你的:) – Whiskey 2012-08-07 16:33:57