0

我正在制作一个小型应用程序,我在其中使用 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。谢谢你!

4

1 回答 1

0

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

于 2012-08-07T13:38:13.603 回答