【问题标题】:wxPython - wx.MessageDialog disappears without clickwxPython - wx.MessageDialog 不点击就消失
【发布时间】:2014-06-28 12:46:17
【问题描述】:

我是 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 中的一个错误?我已经提交了一个错误报告,所以我很快就会发现。

【问题讨论】:

  • 我似乎无法重现这种行为。这段代码似乎可以在我的系统上运行。
  • 它似乎也适用于其他系统 - 也许它是特定于平台的。我用我做过的其他测试编辑了这个问题。
  • 它在 Windows 8 上也能正常工作,wxPython v3.0 也一样。

标签: python wxpython


【解决方案1】:

如果您将 MessageDialog 视为 FileDialog 或类似的,会发生什么?

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 上的 wxpyhon2.8 中以相同的方式工作。

【讨论】:

  • 我很抱歉没有回到这个问题上。这确实可以解决这个问题,所以谢谢你!我还向 wxwidgets 的人提交了一份错误报告,他们已经用新版本的工具包修复了这个问题。
猜你喜欢
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多