0

そのため、スクリプトに表示される wxPython フレームのかなり複雑なセットがあります。必要に応じてすべてのコードを投稿しますが、Windows 7 ではすべてが完全に機能するため、必ずしもコードの問題があるかどうかはわかりません。ただし、Win XP で実行すると、最後のフレーム (印刷) を閉じた後最後の Destroy() および Exit() ステートメントが実行された後のステートメントが実行されますが、その後のプログラムでは何も起こりません)「pythonw.exe でエラーが発生しました」というメッセージが表示されます。エラーレポートには、解釈方法がわからない多くの情報が出力されます。一般的には、「Module #... 'somedll.dll' text ...」のような構造になっています。

私はすべてのコードなどを提供できます..しかし、誰かが私に気付くことができるXPのwxpythonの基本的な移植性要件があることを望んでいました.

以下に簡略化したコードを貼り付ければOK。いくつかのウィンドウが順番にポップアップし、最後のウィンドウが特定の回数繰り返しポップアップします。この種のフレームのネスト (または CallAfter() を使用するコード) を使用したコードを書いたことがないので、間違いなく問題が発生する可能性があります。

import wx
GAME = 5

class Game:
        def __init__(self):
            "various attributes"

class UserFrame ( wx.Frame ):

        def __init__( self, parent, app):
            wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

            self.app = app

            self.m_button3 = wx.Button( self, wx.ID_ANY, u"OK", wx.DefaultPosition, wx.DefaultSize, 0 )
            self.Bind(wx.EVT_BUTTON, self.OnCo, id = self.m_button3.GetId() )

        def OnCo( self, event ):
            self.Close()
            wx.CallAfter(self.nextFrame)
            self.app.Exit()

        def nextFrame(self):
            IntroFrame(None, app).Show()
            app.MainLoop()
            app.Exit()
            print "this prints"

        def __del__( self ):
            pass


class IntroFrame( wx.Frame ):
        def __init__( self, parent, app):
            wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

            self.app = app
            self.m_button4 = wx.Button( self, wx.ID_ANY, u"OK", wx.DefaultPosition, wx.DefaultSize, 0 )
            self.Bind(wx.EVT_BUTTON, self.OnCo, id = self.m_button4.GetId() )

        def OnCo( self, event):
            self.app.myGame = Game()
            wx.CallAfter(self.playGame, self.app.myGame)
            self.Destroy()
            self.app.Exit()

        def playGame(self,myGame):
            apps = []
            for i in range(1,GAME+1):
                    apps.append(CustomApp())
                    PlayerChoice(None, apps[i-1], myGame).Show()
                    apps[i-1].MainLoop()
                    "simple decision tree for game"
                    apps[i-1].Exit()

        def __del__( self ):
            pass


class PlayerChoice( wx.Frame ):

        def __init__( self, parent, app, myGame ):
            self.app = app
            wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

            self.m_button1 = wx.Button( self, wx.ID_ANY, u"Choice 1", wx.Point( -1,-1 ), wx.DefaultSize, 0 )


            self.Bind(wx.EVT_BUTTON, self.OnCo1, id = self.m_button1.GetId() )


        def OnCo1(self,event):
            self.Close()

        def __del__( self ):
            pass


class CustomApp(wx.App):
    def __init__(self):
        wx.App.__init__(self)
        self.myGame = None
        "some other attributes"


app = CustomApp()
UserFrame(None, app).Show()
app.MainLoop()
print "this doesn't print"
app.Exit()
4

0 に答える 0