wxPython - wx.MessageDialog未点击就消失
我刚接触wxPython(wxPython 3.0.0.0,python 2.7,Mac OS X),想在应用程序的OnInit函数中显示一个消息对话框。我运行的一些示例脚本用类似的三行代码都能正常工作,但我用的这段代码,消息对话框只出现了一瞬间就消失了。我是不是做了什么傻事?
import wx
class MyApp(wx.App):
def __init__(self):
wx.App.__init__(self, redirect=False)
def OnInit(self):
self.rootView = wx.Frame(parent=None, id=-1, title="Wire Frame",
pos=(150, 150), size=(350, 250))
self.rootView.Show()
self.SetTopWindow(self.rootView)
dlg = wx.MessageDialog(self.rootView, "Hi", "title", wx.OK|wx.ICON_ERROR)
dlg.ShowModal()
dlg.Destroy()
return True
if __name__ == "__main__":
app = MyApp()
app.MainLoop()
补充:我在Ubuntu上用wxPython 2.8.12.1测试了一下,结果是正常的。我会尝试在那上面安装一个更新的版本来测试一下。也许这是wxPython的一个bug?我已经提交了一个bug报告,应该很快就能知道结果。
1 个回答
1
如果你把消息对话框当成文件对话框或者类似的东西来使用,会发生什么呢?
import wx
class MyApp(wx.App):
def __init__(self):
wx.App.__init__(self, redirect=False)
def OnInit(self):
self.rootView = wx.Frame(parent=None, id=-1, title="Wire Frame",
pos=(150, 150), size=(350, 250))
self.rootView.Show()
self.SetTopWindow(self.rootView)
dlg = wx.MessageDialog(self.rootView, "Hi", "title", wx.OK|wx.ICON_ERROR)
#dlg.ShowModal()
if dlg.ShowModal() != wx.ID_OK:
dlg.Destroy()
return True
if __name__ == "__main__":
app = MyApp()
app.MainLoop()
这可能只是个不太正规的做法,但或许这样也能奏效……
至少,在Windows上的wxpython2.8中,这样做似乎是有效的。