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
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.