2012-08-07 47 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