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)

だから私は上記のリンク(いくつかのリンク)をチェックしたいのですが、失敗した場合はメッセージボックスを表示してから終了します。これを(インターネットをオフにして)実行すると、アプリにメッセージが表示され、[OK]をクリックすると、別のトレースバックボックスが開き、印刷されます

SystemExit:0

実際には終了しません。self.Close も使ってみました。それもうまくいきません。アプリを実行するとすぐに、checkconnection 関数を作成することを考えました。

def checkConnection():

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

に置いた

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

これも同じことをしました。それで、印刷を避けて実際に終了する方法はありますか?

os._exitsys.exitうまくいきましたが、それもうまくいくはずだと思いました。ヒントはありますか?

4

2 に答える 2

1

sys.exit(またはos._exit)を使用する代わりに

self.Destroy()

os._exitクリーンアップハンドラーを呼び出さずにプロセスを突然停止するため、通常は使用しないでください(フォーク後に子プロセスを停止する場合を除く)。

sys.exitSystemExit例外を発生させます。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 に答える