0

我正在制作一个需要互联网连接的 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 也。那也不行。想到我们一运行应用程序就创建一个检查连接功能。

def checkConnection():

    try:
        test = urllib.urlopen("http://www.google.com")
    except:
        sys.exit(0)

把它放在

 def InitUI(self):
        checkConnection()
        .........
        .........

这也做了同样的事情。那么有什么方法可以避免打印并实际退出?

os._exit有效,但我只是认为这也sys.exit应该有效。所以有什么提示吗?

4

2 回答 2

1

代替sys.exit(或os._exit)使用

self.Destroy()

os._exit在不调用任何清理处理程序的情况下突然停止进程,通常不应使用(除非在 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()
于 2012-08-10T19:41:56.200 回答
0

通过调用退出 wx.App 事件循环wx.GetApp().Exit()

于 2012-08-23T04:43:11.757 回答