【问题标题】:Close properly splash-screen正确关闭闪屏
【发布时间】:2014-11-25 13:27:17
【问题描述】:

我编写了一个代码来在我的程序打开时显示启动画面。

def main():
    application = wx.App(False)
    splash = show_splash()
    frame = MainWindow()
    frame.Show(True)
    splash.Destroy()
    application.MainLoop()

但是在程序关闭之前,闪屏会出现和消失。 我用两行代码修复了它,但它很难看:

def main():
    application = wx.App(False)
    splash = show_splash()
    frame = MainWindow()
    frame.Show(True)
    splash.Destroy()
    splash.Hide()
    application.MainLoop()
    plash.Destroy()

我的问题是:为什么当我用第一个代码关闭程序并且你有一个最佳解决方案而不是第二个代码时会出现启动画面?

【问题讨论】:

    标签: python wxpython splash-screen


    【解决方案1】:

    看看 wxPython 演示。实际的演示代码有一个闪屏。它实现了一个“MyApp”,并在 OnInit 方法中创建了启动画面。

    这是一个基于我前段时间所做的一些事情以及演示中所做的工作的示例。

    # -*- coding: utf-8 -*-
    #!/usr/bin/env python
    
    import wxversion
    wxversion.select('3.0-classic', True)
    
    import wx
    from wx.lib.mixins.inspection import InspectionMixin
    
    import wx.lib.sized_controls as sc
    
    print(wx.VERSION_STRING)
    
    class MySplashScreen(wx.SplashScreen):
        def __init__(self):
            #bmp =  wx.Image(opj(os.path.abspath(os.path.join(os.path.split(__file__)[0],"bitmaps","splash.png")))).ConvertToBitmap()
            bmp = wx.ArtProvider.GetBitmap(wx.ART_QUESTION, wx.ART_OTHER, wx.Size(64, 64))
            wx.SplashScreen.__init__(self, bmp,
                                     wx.SPLASH_CENTER_ON_SCREEN | wx.SPLASH_TIMEOUT, #  | wx.STAY_ON_TOP,
                                     3000, None, -1)
    
            self.Bind(wx.EVT_CLOSE, self.OnClose)
            self.fc = wx.FutureCall(2000, self.ShowMain)
    
    
        def OnClose(self, evt):
            # Make sure the default handler runs too so this window gets
            # destroyed
            evt.Skip()
            self.Hide()
    
            # if the timer is still running then go ahead and show the
            # main frame now
            if self.fc.IsRunning():
                self.fc.Stop()
                self.ShowMain()
    
        def ShowMain(self):
            frame = MainFrame(None, title="A sample frame")
            frame.Show()
            if self.fc.IsRunning():
                self.Raise()
    
    
    
    class MainFrame(sc.SizedFrame):
        def __init__(self, *args, **kwds):
            kwds["style"] = wx.DEFAULT_FRAME_STYLE|wx.FULL_REPAINT_ON_RESIZE|wx.TAB_TRAVERSAL
    
            super(MainFrame, self).__init__(*args, **kwds)
    
            self.SetTitle("A sample")
            self.Centre(wx.BOTH)
    
            paneContent = self.GetContentsPane()
    
            # lets add a few controls
            for x in range(5):
                wx.StaticText(paneContent, -1, 'some string %s' % x)
    
            paneBtn = sc.SizedPanel(paneContent)
            paneBtn.SetSizerType('horizontal')
            # and a few buttons
            for x in range(3):
                wx.Button(paneBtn, -1, 'a button %s' % x)
    
    
            self.Fit()
    
    
    class BaseApp(wx.App, InspectionMixin):
    
        """The Application, using WIT to help debugging."""
    
        def OnInit(self):
            """
            Do application initialization work, e.g. define application globals.
            """
            self.Init()
            self._loginShown = False
            splash = MySplashScreen()
    
            return True
    
    
    if __name__ == '__main__':
        app = BaseApp()
        app.MainLoop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多