首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不是来自MainLoop()

不是来自MainLoop()
EN

Stack Overflow用户
提问于 2011-10-25 10:06:44
回答 1查看 1.3K关注 0票数 1

我们在项目中使用了Python2.3和wxPython V2.4.2.4。而且它工作得很好。现在我们正在将其升级到Python2.7和wxPython2.8.12.1。我们的项目在新版本中编译得很好。但在我们的项目中,在代码的某个阶段,我们销毁当前窗口,然后再次创建并打开新窗口。我注意到,在创建新窗口后,我们的代码不会执行。而在旧版本中,它正在执行。

在下面的代码中。它显示消息"doRead 1“,然后打开窗口。但它不显示消息"doRead 2“。而在旧的Python版本中,它会显示消息"do Read 2“,这意味着它会在那之后执行代码。

我发现,它并不是来自OnInit(...)中的"self.MainLoop()“行。在新项目中的函数。但是它出来了,因此执行了旧项目中的下一行。

代码语言:javascript
复制
-----------------------------------------
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-25 10:18:38

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

代码语言:javascript
复制
app = wx.PySimpleApp()

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

app.MainLoop()

# Down here more code can follow.  

它不会执行更多的代码,直到所有顶层窗口从之前的应用程序实例中关闭,或者其他调用wx.GetApp().ExitMainLoop()的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7883948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档