[gelöst] Splash Ladezeit

Plattformunabhängige GUIs mit wxWidgets.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

[gelöst] Splash Ladezeit

Beitragvon mathi » Mittwoch 28. Januar 2009, 07:47

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()
Zuletzt geändert von mathi am Mittwoch 4. Februar 2009, 07:56, insgesamt 1-mal geändert.
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Beitragvon C4S3 » Mittwoch 28. Januar 2009, 21:48

:?
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.
Gruß!
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Donnerstag 29. Januar 2009, 07:12

@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.
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Beitragvon C4S3 » Donnerstag 29. Januar 2009, 14:01

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.
Gruß!
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Donnerstag 29. Januar 2009, 17:01

vielen Dank, der erste Teil der Frage ist damit beantwortet,

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder