2010-07-24 5 views
1

방금 ​​스플래시 화면을 추가 한 wx 응용 프로그램이 있습니다. 문제는 때로는 (약 10 %) 스플래시 화면 프레임이 튀어 나오지만 비어있는 것입니다. 문제를 재현하는 다음 테스트를 작성했습니다 (아래). wx.Yield()는 오류율이 50 %와 비슷하기 때문에 다소 도움이되었습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까?wxSplashScreen 공백

import wx 

SLEEP_TIME = 1.0 # seconds 

if __name__ == '__main__': 
    app = wx.App() 
    splash_image = wx.Image('spikepy_splash.bmp').ConvertToBitmap() 

    splash_screen = wx.SplashScreen(splash_image, 
      wx.SPLASH_CENTRE_ON_SCREEN|wx.SPLASH_NO_TIMEOUT, 0, None) 
    wx.Yield() 
    #wx.SafeYield() 
    #wx.GetApp().Yield() 
    wx.Sleep(SLEEP_TIME) 
+0

어떤 플랫폼입니까? 그것은 나를 위해 작동합니다. – FogleBird

+0

BTW, wx.Bitmap ('spikepy_splash.bmp') – FogleBird

+0

코드를 사용하면 어떻게 될까요? 일반적으로 스플래시 화면을 만들고 모든 것을로드하고 기본 창을 표시 한 다음 스플래시 화면을 파괴하고 마지막으로 app.MainLoop()을 입력합니다. – FogleBird

답변

0

app.MainLoop()보다 먼저 수행하지 않는 것이 중요합니다. 이 제한을 극복하려면 wx.CallLater 또는 그와 비슷한 것을 사용하십시오. 그렇게하면 MainLoop() 전에 수행하고자하는 작업을 이벤트 스택에 추가하여 MainLoop()을 호출 한 후에 발생하도록 할 수 있습니다.

아래의 테스트 코드와 제가 작성한 주요 응용 프로그램 모두에서이 문제가 저에게 해결되었습니다. 방금 모든 가져 오기 및 GUI 구성을 함수에 추가 한 다음 wx.CallLater를 사용하여 해당 함수를 실행했습니다.

import wx 

SLEEP_TIME = 1.0 # seconds 

if __name__ == '__main__': 
    app = wx.App() 
    splash_image = wx.Image('spikepy_splash.bmp').ConvertToBitmap() 

    splash_screen = wx.SplashScreen(splash_image, 
      wx.SPLASH_CENTRE_ON_SCREEN|wx.SPLASH_NO_TIMEOUT, 0, None) 

    wx.CallLater(1000*SLEEP_TIME, splash_screen.Destroy) 
    app.MainLoop()