Seite 1 von 1

Bild kann vom Programm aus manchmal nicht geladen werden!

Verfasst: Sonntag 18. Oktober 2009, 13:29
von fecub
Grüßt euch leute!

habe folgendes problem, unzwa es gibt bei Gnuplot die möglichkeit das geplottete bild, grafik auf die platte zu speichern. Ich möchte dieses gespeicherte Bild auf meinem Programm anzeigen
per,

Code: Alles auswählen

   pic = wx.Bitmap("plot.png", type = wx.BITMAP_TYPE_PNG)
   stat_bmp = wx.StaticBitmap(self.panel, -1, pic, pos=(30, 30))
befehl. Das 1te bild wird geladen und angezeigt, läuft reibungslos.
Aber bei mir wird nicht nur ein bild erstellt sondern alle 10 sekunden.
Es werden regelmäßig ergebnisse in eine Log datei geschrieben und gnuplot nimmt die ergebnisse aus der Log datei und plottet die alle 10 sekunden und speichert es als grafik ab.

Und mein Programm lädt die gespeicherte grafik und zeigt es an, nur manchmal bekomme ich eine Fehlermeldung,

Code: Alles auswählen

Image file is not of type 15
ich denke mal der fehler tritt in dem momment auf wo gnuplot die grafik gerade erstellt und nicht fertig mit dem speichern ist und python in dem augenblick versucht es zu laden!?!?!?!?egal kann ich denn so ein fehler abfangen also per try...except? oder wie könnte ich es überprüfen ob wxPython mit der Grafik arbeiten kann?

Würde mich sehr freuen wenn Ihr bei meiner Problem behilflich seien würdet!

Gruß
fecub

Verfasst: Sonntag 18. Oktober 2009, 13:47
von EyDu
Versuche doch einfach mal den Fehler abzufangen und dann (vielleicht mit etwas Verzögerung), das Bild noch einmal zu laden. Die genaue Exception hast du uns ja nicht verraten, da du wohl nur den letzten Teil des Tracebacks gezeigt hast ;-)

Verfasst: Sonntag 18. Oktober 2009, 14:12
von fecub
das problem ist ja, es wird ein fenster geöffnet

screenshot:
http://img194.yfrog.com/img194/4163/bil ... oto1aw.png

So sieht die Fehlermeldung aus!

Verfasst: Sonntag 18. Oktober 2009, 14:26
von EyDu
Ok, das ist natürlich ärgerlich.

Ich kenne mich wxPython nicht genau genug aus, daher weiß ich auch nicht genau, ob es auf diese Weg funktioniert und ob es noch eine bessere Lösung gibt (wovon ich einfach mal ausgehe).

Du könntest erst ein wx.Image erstellen und dies dann mittels wx.BitmapFromImage umwandeln. Zum Laden des Bildes habe ich wx.Image.LoadFile verwendet, was ein bool zurückliefert.

Du könntest es mal so versuchen, aber ich kann für nichts garantieren.

Edit: könntest du das Bild vielleicht noch auslagern oder verkleinern? Zumindest bei mir sprengt es die horizontalen Grenzen meines Bildschirms.

Verfasst: Sonntag 18. Oktober 2009, 14:31
von fecub
ok ich werde es mal ausprobieren

Verfasst: Sonntag 18. Oktober 2009, 15:00
von HWK
Zwar etwas spät, aber mein Ansatz war ein ähnlicher:

Code: Alles auswählen

        img = wx.Image('plot.png', type=wx.BITMAP_TYPE_PNG)
        try:
            pic = wx.BitmapFromImage(img)
        except wx._core.PyAssertionError:
            print 'Fehlerhaftes Format'
MfG
HWK

Verfasst: Sonntag 18. Oktober 2009, 16:27
von fecub
danke für eure antworten!ich habe es so ausprobiert wie ihr es beschrieben habt, aber da hat sich nichts geändert. Bekomme die gleiche Fehlermeldung!
Gäbe es vieleicht eine andere Möglichkeit?

Verfasst: Montag 19. Oktober 2009, 06:06
von Dav1d
Versuch mal das:

Code: Alles auswählen

wx.BITMAP_TYPE_ANY
lässt du das Bild im selben Programm erstellen? oder externes Programm?, rufst du es per wx.Timer dann auf?

wenn du es per wx.Timer aufrufst mach aus 10 sec 10.5

Verfasst: Montag 19. Oktober 2009, 06:54
von HWK
fecub hat geschrieben:danke für eure antworten!ich habe es so ausprobiert wie ihr es beschrieben habt, aber da hat sich nichts geändert. Bekomme die gleiche Fehlermeldung!
Gäbe es vieleicht eine andere Möglichkeit?
Mit Deiner ursprünglichen Variante konnte ich Deine Fehlermeldung reproduzieren, wenn ich eine TIF-Datei als PNG angeboten habe. Mit meiner Variante konnte ich dann diese Messagebox vermeiden und den Fehler abfangen. Bekommst Du denn jetzt immer noch diese Messagebox? Welche Zeile meines Codes löst Sie denn aus?
MfG
HWK