2014-05-10 2 views
1

wxPython (wxPython 3.0.0.0, Python 2.7, Mac OS X)을 처음 사용하고 응용 프로그램의 OnInit 함수에 메시지 대화 상자를 표시하려고합니다. 예제 스크립트는 매우 유사한 3 줄 코드 블록을 사용하여 잘 작동하지만,이 스크립트를 사용하면 메시지 대화 상자가 두 번째로 나타나고 사라집니다. 내가 잘못하고있는 바보 같은 것이 있습니까?wxPython - 클릭하지 않고 wx.MessageDialog가 사라짐

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() 

편집 : wxPython 2.8.12.1을 사용하여 우분투에서 테스트했으며 정상적으로 동작합니다. 나는 그것을 테스트하기 위해 거기에 새로운 버전을 갖다 주겠다. 아마도 이것은 wxPython의 버그입니까? 버그 보고서를 제출 했으므로 곧 알게 될 것입니다.

+0

이 동작을 재현 할 수 없습니다. 이 코드는 내 시스템에서 작동하는 것 같습니다. –

+1

다른 시스템에서도 작동하는 것 같습니다. 아마도 플랫폼에 따라 다릅니다. 내가 한 다른 테스트로이 질문을 편집했습니다. –

+0

Windows 8, wxPython v3.0에서도 잘 작동합니다. –

답변

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() 

아마 단지 hackish 방법으로 주위에 갈 수 있지만,이 작업을 할 수 있습니다 ...

은 적어도이 Windows에서 wxpyhon2.8에서 같은 방식으로 작동하는 것 같다.

+0

여기로 돌아 가지 못해서 사과드립니다. 문제 해결을위한 해킹으로 작동 했으므로 고맙습니다. 나는 또한 wxwidgets 친구들에게 버그 리포트를 제출했으며, 툴킷의 새로운 버전으로이를 수정했다. –

+0

잘 작동했습니다. 그래, 버그보고가가는 길이야! – otterb

관련 문제