2014-11-25 49 views
0

我做了一个代码,当我的程序正在打开时显示一个闪屏。关闭正常闪屏

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

我的问题是:为什么启动画面当我关闭PROGRAMM与第一码和你有一个最佳的解决方案,而不是第二个码的出现?

回答

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

谢谢你,我检查了我的代码! – Coug 2014-11-28 07:48:49