Fehler bei Image

Plattformunabhängige GUIs mit wxWidgets.
Antworten
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

Hallo,

warum funktioniert dieser Code nicht:

Code: Alles auswählen

import wx
from bufferedcanvas import *

class TestCanvas(BufferedCanvas):
    
    image = None
    
    def __init__(self,parent,ID=-1):
        BufferedCanvas.__init__(self,parent,ID)
        try:
            self.imageFile = 'Moo.jpg'
            self.image = wx.Image(self.imageFile)
        except:
            print "Image file %s not found" % imageFile
            raise SystemExit
        
    def draw(self, dc):
        dc.SetBackground(wx.Brush("Black"))
        dc.Clear()
        dc.SetBrush(wx.BLUE_BRUSH)
        dc.SetPen(wx.Pen('Red', 4))
        dc.DrawRectangle(20,20,300,200)
        bmp2 = wx.BitmapFromImage(self.image)
        dc.DrawBitmap(bmp2, 0, 0)   

class TestFrame(wx.Frame):

    def __init__(self,
                 parent=None,
                 ID=-1,
                 title="BufferedCanvas Test",
                 pos=wx.DefaultPosition,
                 size=wx.DefaultSize,
                 style=wx.DEFAULT_FRAME_STYLE):
        wx.Frame.__init__(self,parent,ID,title,pos,size,style)
        self.canvas = TestCanvas(self)
        self.Bind(wx.EVT_CLOSE, self.onClose)

    def onClose(self,event):
        self.Show(False)
        self.Destroy()


def main():
    app = wx.PySimpleApp()
    frame = TestFrame()
    frame.Show(True)
    app.MainLoop()

if __name__ == '__main__':
    main()
Diese Fehlermeldung bekomme ich:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\burn\buffered\testbuffered.py", line 52, in <module>
    main()
  File "C:\burn\buffered\testbuffered.py", line 47, in main
    frame = TestFrame()
  File "C:\burn\buffered\testbuffered.py", line 37, in __init__
    self.canvas = TestCanvas(self)
  File "C:\burn\buffered\testbuffered.py", line 10, in __init__
    BufferedCanvas.__init__(self,parent,ID)
  File "C:\burn\buffered\bufferedcanvas.py", line 88, in __init__
    self.onSize(None)
  File "C:\burn\buffered\bufferedcanvas.py", line 141, in onSize
    self.update()
  File "C:\burn\buffered\bufferedcanvas.py", line 116, in update
    self.draw(dc)
  File "C:\burn\buffered\testbuffered.py", line 24, in draw
    bmp2 = wx.BitmapFromImage(self.image)
  File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py", line 823, in BitmapFromImage
    val = _gdi_.new_BitmapFromImage(*args, **kwargs)
ValueError: invalid null reference in method 'new_BitmapFromImage', expected argument 1 of type 'wxImage const &'
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

Hallo,

ich habe meinen Fehler gefunden:

Ich muss erst das Image erstellen und dann darf ich erst

Code: Alles auswählen

BufferedCanvas.__init__(self,parent,ID)
aufrufen.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Der try...except-Block ist häßlich, weil er alle Fehler abfängt (und dann einen generischen Fehler wirft). Eigentlich brauchst du den nicht, denke ich.
andreaszdw
User
Beiträge: 24
Registriert: Donnerstag 12. Oktober 2006, 07:28

Danke für den Tipp!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

In der Tat: wx.Image() sagt Dir schon, wenn es ein File nicht findet - und diese Außnahme könntest Du ggf. abfangen und behandeln - z. B. in dem Du einen Messagedialog öffnest.

Und: Brauchst Du wirklich self.imageFile und self.image? ;-)

Gruß,
Christian
Antworten