そのため、スクリプトに表示される 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()