我正在尝试编写一个GUI程序从一个网页抓取特定的内容。我的想法是,当我点击开始按钮时,程序应该开始从该页面提取信息。我想添加一些代码来检查是否连接到互联网。如果没有,请继续尝试直到连接。在
所以我只是在事件中添加了以下代码,但是发现它不起作用。而且整个程序必须以强制方式关闭。我的代码是:
import urllib2
import time
InternetNotOn = True
while InternetNotOn:
try:
urllib2.urlopen("http://google.com")
InternetNotOn = False
print "Everyting is fine!"
except urllib2.URLError, e:
print "Error!"
time.sleep(10)
有什么问题吗?在
当您有一个基于事件的程序时,程序的总体流程如下:
现在,让我们看看当服务事件调用具有(潜在)无限循环的内容时会发生什么:
^{pr2}$你看到问题了吗?在更糟糕的情况下,由于循环正在运行,您的程序可能再也不会调用wait for a event。在
请记住:事件循环已经是一个无限循环,您不需要在其中添加另一个无限循环。相反,利用现有的循环。可以使用wx.CallAfter或wx.CallLater调用一个方法,该方法将导致在事件循环的下一次迭代中调用函数。在
然后,在您的函数中再次调用wx.CallAfter或wx.CallLater,以使它在事件循环的下一次迭代中再次被调用。在
您可以调用wxApp::Yield和{}十次,而不是
time.sleep(10)
。在小心重入问题(例如再次按下启动按钮)。“开始”按钮在事件处理程序中时可能会变暗。在
但是Bryan Oakley's solution可能是更好的方法。在
相关问题 更多 >
编程相关推荐