我正在制作一个需要互联网连接的wxpython应用程序。所以,我需要检查是否存在连接,如果没有,则退出。所以我的代码看起来像这样。
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title,
size=(700,650))
self.InitUI()
self.Centre()
#*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.
#--------------------------------------------------------------------------------
favicon = wx.Icon(ICON_PATH, wx.BITMAP_TYPE_ICO)
wx.Frame.SetIcon(self, favicon)
self.Show()
def InitUI(self):
#checkConnection()
checkInstances()
panel = wx.Panel(self)
font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
font.SetPointSize(9)
font1 = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
font1.SetPointSize(10)
#Layout
vbox = wx.BoxSizer(wx.VERTICAL)
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
st1 = wx.StaticText(panel, label='Select Slot :')
st1.SetFont(font1)
hbox1.Add(st1, flag=wx.ALL, border=8)
try:
handler = urllib.urlopen("http://%s/api/get-slots/?api_key=%s"%(BASE_DOMAIN, API_KEY))
except:
wx.MessageBox("Error communicating with the server.", 'WARNING',wx.OK |wx.ICON_INFORMATION)
handler = None
sys.exit(0)
所以我想检查上面的链接(某个链接),如果失败,我会显示一个消息框,然后我退出。当我运行这个(关闭互联网)时,应用程序会显示该消息,然后在单击“确定”后,将打开另一个带有打印的回溯框
SystemExit:0
它实际上并没有退出。尝试使用self.Close也。那也行不通。 考虑在我们运行应用程序后立即执行checkconnection功能。
def checkConnection():
try:
test = urllib.urlopen("http://www.google.com")
except:
sys.exit(0)
放在
def InitUI(self):
checkConnection()
.........
.........
这也做了同样的事情。那么是否有一些方法可以避免打印 并且实际退出?
os._exit
工作但我只是认为sys.exit
也应该有效。
那么有什么提示吗?
答案 0 :(得分:1)
而不是sys.exit
(或os._exit
)使用
self.Destroy()
os._exit
突然停止进程而不调用任何清理处理程序,通常不应该使用(halt child processes after a fork除外)。
sys.exit
引发SystemExit异常。 wxpython
必须捕获此异常并选择在不退出应用程序的情况下打印错误消息。
self.Destroy()
应该退出该应用。
try:
test = urllib.urlopen("http://www.google.com")
except IOError:
wx.MessageBox("Error communicating with the server.")
self.Destroy()
答案 1 :(得分:0)
通过调用wx.GetApp().Exit()
退出wx.App事件循环。