2011-10-25 10 views
1

プロジェクトでPython2.3とwxPython V2.4.2.4を使用していました。そして、うまくいきました。今、Python2.7とwxPython2.8.12.1にアップグレードしています。私たちのプロジェクトは新しいバージョンでうまくコンパイルされています。しかし、コード内の1つの段階でのプロジェクトでは、現在のウィンドウを破棄してから&新しいウィンドウを再度開きます。そして私は、新しいウィンドウを作成した後のコードが実行されないことに気付きました。古いバージョンでは実行中でした。MainLoop()から出てこない

次のコードにあります。メッセージ "doRead 1"を表示してから、ウィンドウを開きます。しかし、メッセージ "doRead 2"は表示されません。古いPythonバージョンでは、 "do Read 2"というメッセージがそれ以降のコードを実行していたというメッセージを表示していました。

私は、新しいプロジェクトのOnInit(...)関数の "self.MainLoop()"という行から出てこないことがわかりました。しかし、それは出てきて、古いプロジェクトの次の行を実行していた。

----------------------------------------- 
Here is the code: 
#Close existing window. 
self.Destroy() 
print 'doRead 1' 

#create new window 
app = App() 
print 'doRead 2' 
app.frame.saveContents() 
------------------------------------ 

class App(wx.App): 
    """Application class. 
    """ 
    def OnInit(self): 
     wx.InitAllImageHandlers() 
     resetOptions() 
     setOptions() 
     self.frame = pdtpFrame() 
     self.frame.SetTitle(std.getTitle()) 
     self.frame.Show() 
     self.SetTopWindow(self.frame) 
     self.MainLoop() 
     return True 


def main(): 
    """ Start up the pdtp main window application. 
    """ 
    app = App() 

if __name__ == '__main__': 
    main() 

答えて

1

あなたの悩みは(私の知る限り)あなたのプログラムの流れを停止され、あなたのOnInit関数の内部であなたのメインループを持っているということです。 OnLitがTrueを返すまで、あなたはアプリケーションのMainLoopに入ることができないはずなので、前のように、それが以前のようにうまくいかなかったかどうかはわかりません。 OnInitはFalseを返すことがあります。その場合、アプリケーションは完全に初期化されませんでした(たとえば、ロックファイルを持つ単一インスタンスのアプリケーションを実行している場合は共通です)。より一般的なアプローチ(擬似コード)は次のようになります。

app = wx.PySimpleApp() 

f = Frame(None, -1, "Some Title For This Frame") 
f.Show() 

app.MainLoop() 

# Down here more code can follow. 

それは後に、すべてのトップレベルのWindowsは、前のAppインスタンスから閉鎖されている、または何か他のものがwx.GetApp().ExitMainLoop()を呼び出すまでより多くのコードを実行されません。

+0

返信いただきありがとうございます。あなたの答えは、私が原因に達するのを助けました。実際には、現在のウィンドウを破棄して新しいウィンドウを作成する場所の古いプロジェクトでは、app.MainLoop()を記述していませんでした。 Python2.3ではうまくいきました。 Python2.7ではクラッシュしていました。このため、onInit()関数でself.MainLoop()を追加しました。これはクラッシュする問題を止めましたが、MainLoop()から出てこないので、その行の後にコードを実行しません。 これでapp.MainLoop()が追加されました。問題なく動作しています。 ありがとうございました。 – user977601

関連する問題