为什么我的wxPython程序只能运行一次

为什么我的wxPython程序只能运行一次

在我的embeded python中,调入一个wxPython脚本(只是简单的hello world)。 可是这个脚本第一次运行正确,第二次就把我的整个应用程序crash掉了。
这是这个脚本:


from wxPython.wx import *
class MyApp(wxApp):
    def OnInit(self):
        frame = wxFrame(NULL, -1, "Hello World")
        frame.Show(true)
        self.SetTopWindow(frame)
        return true
app = MyApp(0)
app.MainLoop()


后来换了一个脚本

from wxPython.wx import wxPySimpleApp, wxFrame

app = wxPySimpleApp()
frame = wxFrame(None, -1, "Hello, World!")
frame.Show(1)
app.MainLoop()

这个脚本第二次运行倒是不crash了,它报错:
wx._core.PyNoAppError: The wx.App object must be created first!


有人能指点一下迷津么?
第一个程序我运行了几次都没问题呀。我的环境是xp+python 2.4.2+wxPython 2.6。
第二个我也没有报错。

btw:导入wx模块,目前通用的方式是import wx。这样所有的wx开头的名字都不用了。象wxFrame就改为Frame。这样更方便。


QUOTE:
原帖由 limodou 于 2005-12-5 21:44 发表
btw:导入wx模块,目前通用的方式是import wx。这样所有的wx开头的名字都不用了。象wxFrame就改为Frame。 ...

Good tip!
我不知道你是怎么运行的。我是说这样,打开PythonWin. 然后在里面用execfile的方式来运行这个脚本。第一次没问题, 第二次再执行execfile就会出问题。 当然如果关掉PythonWin,再重新打开,然后运行,当然也没问题
我是在命令行下运行的,运行多次没有问题。运行所有的gui程序,都建议你在命令行下运行。
命令行是指 Python (command line)吧。 我刚刚也试过了,结果一样,真是太奇怪了。

我之所以用PythonWin测试,是因为我的application也是GUI的,我Embedding Python之后,应该和PythonWin有比较高的可比性。

也许等有时间我重装一下Python和wxPytho再试好了,好在现在第一次运行是正常的。
不是。是指dos窗口。
那么用解释器交互方式 使用execfile 执行一个脚本,执行第二次为什么会得到不同的结果呢?
因为两个都有事件循环在里面,可能会有冲突。而在dos下没有这个问题。
第一个execfile我已经把那个hello window窗口关掉了,难道这种情况下,消息循环还不退出么?

那要怎么解决这个问题? 我是要在我嵌入的application里面来运行脚本程序,不能说带GUI的脚本都一律只能运行一次吧