[wxPython] Gif darstellen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Mylendjir
User
Beiträge: 4
Registriert: Freitag 26. März 2004, 22:47

Guten abend,

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


Gruß

Mylendjir
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

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 )
Mylendjir
User
Beiträge: 4
Registriert: Freitag 26. März 2004, 22:47

Bild

Dann bekomme ich diese fehler Meldung.... Ich hatte es auch schon probiert aber irgendwie will wxImage nicht...[/img]
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

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?
Mylendjir
User
Beiträge: 4
Registriert: Freitag 26. März 2004, 22:47

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.
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

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
Mylendjir
User
Beiträge: 4
Registriert: Freitag 26. März 2004, 22:47

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?
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

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