wxPython - wx.MessageDialog未点击就消失

1 投票
1 回答
552 浏览
提问于 2025-04-18 06:09

我刚接触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中,这样做似乎是有效的。

撰写回答