Seite 1 von 1

[wxPython] Gif darstellen

Verfasst: Freitag 26. März 2004, 22:52
von Mylendjir
Guten abend,

weiss jemand zufällgi wie man ein GIF mit wxPython lib laden kann ( also einfach auf nen Panel packen) ?
Merci


Gruß

Mylendjir

Verfasst: Freitag 26. März 2004, 23:39
von Christopy
Hallo Mylendjir

Vielleicht hilft Dir folgender kleiner Beispielcode, der ein Gif auf einen Frame malt. Leider kann man ein wxImage nicht direkt zeichnen, sondern muss es erst in ein wxBitmap umwandeln. Das kann man dann mit wxDC.DrawBitmap() zeichnen.

Code: Alles auswählen

class MyFrame(wxFrame): 
    def __init__(self, *args, **kwds):
        kwds["style"] = wxDEFAULT_FRAME_STYLE
        wxFrame.__init__(self, *args, **kwds)

        self.bm = wxBitmapFromImage( wxImage("mygif.gif" , wxBITMAP_TYPE_GIF) )
        EVT_PAINT( self, self.OnPaint )
        
    def OnPaint( self, event ):
        dc = wxPaintDC( self )
        dc.DrawBitmap( self.bm, 0, 0, False )

Verfasst: Samstag 27. März 2004, 09:53
von Mylendjir
Bild

Dann bekomme ich diese fehler Meldung.... Ich hatte es auch schon probiert aber irgendwie will wxImage nicht...[/img]

Verfasst: Samstag 27. März 2004, 11:17
von Christopy
Dann zeig doch mal Deinen Code und lad mal Dein gif hoch. Viellicht ist ja irgendwas mit dem gif nicht in Ordnung. Hast Du das mal unter einen anderen Format abgespeichert? Welche Version von wxPython benutzt Du?

Verfasst: Samstag 27. März 2004, 12:26
von Mylendjir

Code: Alles auswählen

from wxPython.wx import *

VERSION = '0'

class CMyFrame(wxFrame):
    def __init__(self, parent, ID, title, pos=wxDefaultPosition,size=wxDefaultSize, style=wxDEFAULT_FRAME_STYLE):
        wxFrame.__init__(self, parent, ID, title, pos, size, style)
        panel = wxPanel(self,-1)
        bmp = wxImage('osiris3.gif', wxBITMAP_TYPE_GIF ).ConvertToBitmap()
        wxStaticBitmap(panel, -1,bmp, wxPoint(10, 10), wxSize(bmp.GetWidth(), bmp.GetHeight()))
# - class CMyFrame(wxFrame):----------------------------------------------------------------------------------
class CMyApp(wxApp):
    def OnInit(self):
        frame = CMyFrame(None, -1, VERSION)
        frame.Show()
        return true
# - class CMyApp(wxFrame):----------------------------------------------------------------------------------
if __name__ == '__main__':
    app = CMyApp(0)
    app.MainLoop()
wxWindows version 2.4.1 und nein habe ich nicht da das ein gif mit mehreren frames ist.

Verfasst: Samstag 27. März 2004, 12:57
von Christopy
Hallo Mylendjir

Du musst vorher noch wxInitAllImageHandlers() aufrufen. Dann klappt es...

Code: Alles auswählen

class CMyApp(wxApp): 
    def OnInit(self): 
        wxInitAllImageHandlers() 
        frame = CMyFrame(None, -1, VERSION) 
        frame.Show() 
        return true

Verfasst: Samstag 27. März 2004, 13:18
von Mylendjir
das anzeigen eines Gifs geht nun erstmal danke!

Aber ich kann kein Gif mit mehreren frames verwenden ( link s.o.)

weiss jemand wie man das beheben kann?

Verfasst: Samstag 27. März 2004, 14:03
von Christopy
Animierte Gifs funktionieren afaik nicht automatisch. Du kannst im Konstruktor wxImage() als letztes Argument einen Index angeben um den zu ladenden Frame zu bestimmen.
wxImage_GetImageCount() soll eigentlich die Anzahl der Images zurückgeben, funktioniert bei mir aber nicht wirklich.