gpt4 book ai didi

python - 不是从 MainLoop() 出来的

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:40 30 4
gpt4 key购买 nike

我们在项目中使用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()

最佳答案

你的麻烦(据我所知)是你的 MainLoop 位于 OnInit 函数内,这会停止你的程序流程。老实说,我无法说出它以前是如何工作的,因为在 OnInit 返回 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.

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

关于python - 不是从 MainLoop() 出来的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883948/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com