不是来自MainLoop()

时间:2011-10-25 02:06:44

标签: python wxpython

我们在项目中使用Python2.3和wxPython V2.4.2.4。它工作正常。现在我们将它升级到Python2.7和wxPython2.8.12.1。我们的项目编译得很好,新版本。但是在代码的一个阶段我们的项目中,我们会破坏当前窗口,然后创建&再次打开新窗口。我注意到创建新窗口后的代码没有执行。在旧版本中它正在执行。

在以下代码中。它显示消息“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 个答案:

答案 0 :(得分:1)

你的麻烦(据我所知)你的OnInit函数中有MainLoop,这会暂停你的程序流程。我不能说它之前是如何工作的,老实说,因为在OnInit返回True之前,你不应该进入应用程序的MainLoop。 OnInit可以返回False,在这种情况下,App没有完全初始化(例如,如果您正在使用锁定文件执行单实例应用程序)。更常见的方法(伪代码)如下所示:

app = wx.PySimpleApp()

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

app.MainLoop()

# Down here more code can follow.  

在从之前的App实例关闭所有顶级Windows之后,或者其他内容调用wx.GetApp().ExitMainLoop()之前,它不会执行更多代码。