Seite 1 von 1

[gelöst] Splash Ladezeit

Verfasst: Mittwoch 28. Januar 2009, 07:47
von mathi
Hallo miteinander,

ich habe ein Programm, dass sehr viele und große Unterprogramme beim Start importiert. Daher wollte ich die ladezeit mit einem Splash "verkürzen". Leider erscheint der Splash erst kurz vor dem erscheinen des Hauptfensters und nicht sofort.

Unten mal der abgemagerte (funktionierende) Beispielcode. Dieser lädt natürlich schnell, da nichts weiter importiert wird.

Frage: wie kann ich das Anzeigen des Splash beschleunigen oder kann ich das importieren der Module mit einem event verbinden??

Noch eine Frage nebenbei: das icon im Frame erscheint auf meinem 19'' Monitor (1600x1200), aber auf dem 24'' Monitor mit einer Auflösung von
1920x1200 leider nicht. Woran kann das liegen? Evtl. an der eingestellten Icon-Größe in Vista? Ich dachte das wird automatisch skaliert.

Gruß Mathi

Code: Alles auswählen

# -*- coding: iso-8859-15 -*-


from wx.lib.embeddedimage import PyEmbeddedImage
import wx.lib.newevent

#import wx.html

wx.SetDefaultPyEncoding("iso-8859-15") 

#---------------------------------------------------------------------------------------
icon_stream = PyEmbeddedImage( 
    "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAEGUlE" 
    "QVRIie1WS0srSxCu6emeR2I0JiSKaBa+FSQouAnE4MJf4EIQf4Nu/DWu/AsuxIXg+4EgKi6S" 
    "nWJioiSZPCaJwzzSfRfNzQk65njlcs65cL/FMExX9Vf1dVX1APwnIAjCL3T7Nn4137+C7wTd" 
    "2UcQhHaDnxr/eB8eHl5bW8vlcoIgEEIsy6KUfvRhjImiGIlEtra2np+fAWBpaWl2dlbTNMYY" 
    "ACCECCG2bVNKRVHEGFuWBQCUUowxd8Tz8/Nzc3MrKyulUimTyUSjUcdxXMlkWdY0bXd3N5vN" 
    "MsYWFhbi8XgwGOTBSZJ0fn4ejUYlSUomkwMDA4FAgC/Jsvz6+rq3t4ebzWYkEqnVaoQQVVV1" 
    "Xbdt+7PMxsbGCoUCF+fl5WVgYCCfz1NKGWOKovT29jLGGo1GJBLRNA1j3Gw2GWOEkMHBQQBA" 
    "AKAoCteQEIIQ6iC9JEmcmDGGEEII8e+CIHAZMcaMMUmSJEniq3xJFEUAwAihnZ2diYkJALi5" 
    "uVldXQ2Hw65nLopiPp8fHR19eHgAgPHxcV3Xh4aGGGOU0re3t9PT03g8bhhGsVjEGCcSCUVR" 
    "uP7VahUAMKV0eXlZ13VCSDAYnJ6eFkXxHRljjAfY3d1dLBb5x83NTVVVDcOglHK5jo+P/X6/" 
    "YRhTU1PX19eTk5N8K+749vaGAcAwjEajIctyV1cXADSbTa4ML7P29xYTAFiWZdt2ywYAvF6v" 
    "YRiGYWCMVVVtbdVy/CE6AGCM27N5x+RaNe90hr+7sH2rFjDXVFEUQkh74P+I9YvACKGTk5NA" 
    "IEAIeXx8vLi46OnpeRdvJpPxeDwejwdjvLGxcXBw8E0yxtj09LSqqjx9RVF0XW+3IIRUKpX+" 
    "/n7Lsnp6ejKZzPczo5T6fD7TNAGAUsqPvd2Ct4tpmqZpejyeDnvxzmu1oIsBxvju7s5xHF3X" 
    "n56eeAO2wKdAKpXSNE3TtMPDw8+6HgDu7+8xxoIgFAqFcrnsklk6nXYc5+zsjAd1dHTUqleO" 
    "crkci8XC4XC1Wp2cnHSdnBwzMzN8NRQK1et1F7LLy8vLy8sO4gDA9vZ2JBIBAMbYu1DawRhz" 
    "HIcPFFezTzVph8/nE0Xxi3Xf4XpDnZc56vW6IAgfx9jXaThwIpFYX1/P5XKuiQuCUCqVGGOl" 
    "UknXddM0CSGdd+xE1tfXhzFeXFy0LMs1NITQ/v7++Pi43++/vb3tUI0/1RlTSkdGRqrV6mdk" 
    "siwPDQ3xHojFYh0KhLcNv9VcY8L82uSjCNwGICHE6/X6fD6MsSzL/ORck6jVapIkZbNZv9/v" 
    "qjaybTuVSpmmyWdH+9O2bcdxTNOsVCrJZLJarV5dXYVCoY9MXBKEkKZpyWQynU4Hg0GX3Fsh" 
    "fPZ39if+v/6emL7E+ifK9T9+O/4Ca6olvzq05dsAAAAASUVORK5CYII=" 
) 


#---------------------------------------------------------------------------------------------

class MySplashScreen(wx.SplashScreen): 
    """ 
Create a splash screen widget. 
    """ 

    
    def __init__(self, parent=None):
        
        geticon_streamData = icon_stream.GetData()
        geticon_streamImage = icon_stream.GetImage()
        geticon_streamBitmap = icon_stream.GetBitmap()
        bmp1=geticon_streamBitmap
        mask = wx.Mask(bmp1, wx.BLUE)
        bmp1.SetMask(mask)
        splashStyle = wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT 
        splashDuration = 1000 # milliseconds 

        wx.SplashScreen.__init__(self, bmp1, splashStyle, 
                                 splashDuration, parent) 
        wx.Yield()
       
#---------------------------------------------------------------------------


class MyFirstFrame(wx.Frame): 
    """ 
    Erster Frame 
    """ 
    
    def __init__(self, parent = None, id = -1, title = '*** Tools V2.01 ***'): 
        """ 
        Frame initialisieren und aufbauen 
        """ 

        # Initialisieren 
        wx.Frame.__init__(self, parent, id, title,size=(900,870), style=wx.DEFAULT_DIALOG_STYLE | wx.MINIMIZE_BOX ) 
        # Basispanel 
        panel = wx.Panel(self) 
        panel.SetBackgroundColour(wx.Colour(240,240,240))
        #Icon
        img = wx.ImageFromBitmap(icon_stream.GetBitmap()) 
        img.Rescale(16, 16) 
        bmp2 = wx.BitmapFromImage(img) 
        bmp2.SetMaskColour(wx.BLUE) 
        icon = wx.IconFromBitmap(bmp2)
        self.SetIcon(icon)
        # Font- Schriftart der Überschriften 
        font = wx.Font(10, wx.NORMAL, wx.NORMAL, wx.BOLD)

       
       
        # Frame zentrieren 
        if parent: 
            self.CenterOnParent(parent) 
        else: 
            self.Center() 
        
        # Frame anzeigen 
        self.Show() 
    
#-----------------------------------------------------------------------------------------------------------            
def main(): 
    """ 
    Hauptprozedur 
    """ 
    
    app = wx.App() 
    splash=MySplashScreen()
    splash.Show()
    first_frame = MyFirstFrame()
    first_frame.Center()
    first_frame.Show()
    app.MainLoop() 

if __name__ == "__main__": 
    main()

Verfasst: Mittwoch 28. Januar 2009, 21:48
von C4S3
:?
Ich wollte es mir ja ansehen, aber:
C:/Python25/pythonw.exe -u "c:/dokume~1/peter/lokale~1/temp/tmp-7qswj.py"
Traceback (most recent call last):
File "c:/dokume~1/c4s3/lokale~1/temp/tmp-7qswj.py", line 4, in <module>
from wx.lib.embeddedimage import PyEmbeddedImage
ImportError: No module named embeddedimage
IDE: DrPython
wxPython: 2.8.7.1
Python: 2.5.1

Wird wohl an meiner Version liegen, denke ich. Sorry, da muss ich wohl erst ein Update machen.

Verfasst: Donnerstag 29. Januar 2009, 07:12
von mathi
@C4S3

das liegt an wxPython, wurde mit Version 2.8.8.0 eingeführt, Du kannst ja das Splash Image auch einfach als jpg einbinden, hab ich nicht gemacht, um eine funktionierende Version hier einzustellen.

Verfasst: Donnerstag 29. Januar 2009, 14:01
von C4S3
http://wiki.wxpython.org/SplashScreen

Ich hatte sowas schon vermutet. ;)

Bei der OnExit()-Methode des Splashscreens wird dann das Frame Objekt erstellt.
In deinem Code läuft ja nach dem erzeugen des SplashScreen-Objekts das Programm weiter und erzeugt dann gleich den Frame.

Verfasst: Donnerstag 29. Januar 2009, 17:01
von mathi
vielen Dank, der erste Teil der Frage ist damit beantwortet,

hat jemand eine Idee warum das Icon nicht immer angezeigt wird??