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