Nous utilisions Python2.3 et wxPython V2.4.2.4 dans notre projet. Et ça fonctionnait bien. Maintenant, nous le mettons à jour vers Python2.7 et wxPython2.8.12.1. Notre projet est compilé avec une nouvelle version. Mais dans notre projet à un stade dans le code, nous détruisons la fenêtre en cours, puis créer & ouvrir une nouvelle fenêtre à nouveau. Et j'ai remarqué que notre code après avoir créé une nouvelle fenêtre ne s'exécute pas. Alors que dans l'ancienne version, il était en cours d'exécution.Ne sort pas de MainLoop()
Dans le code suivant. Il affiche le message "doRead 1" puis ouvre la fenêtre. Mais il n'affiche pas le message "doRead 2". Alors que dans l'ancienne version de Python, il affichait le message "do Read 2", cela signifiait qu'il exécutait le code après cela.
J'ai trouvé que, il ne sort pas de la ligne "self.MainLoop()" dans la fonction OnInit (...) dans le nouveau projet. Mais il sortait et exécutait ainsi la ligne suivante dans le vieux projet.
-----------------------------------------
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()
Merci pour la réponse. Votre réponse m'a aidé à atteindre la cause. En fait dans le vieux projet à l'endroit où nous détruisons la fenêtre actuelle et créons une nouvelle fenêtre, nous n'avions pas écrit app.MainLoop(). Qui a fonctionné pour Python2.3. Pendant qu'il était en Python2.7, il s'est écrasé. Ainsi, nous avons ajouté self.MainLoop() dans la fonction onInit(), qui a arrêté le problème de plantage mais qui ne vient pas de MainLoop(), n'exécute donc pas le code après cette ligne. Maintenant, j'ai ajouté l'app.MainLoop() comme vous l'avez mentionné et cela fonctionne très bien. Merci beaucoup pour votre aide. – user977601