Datei wird nicht erkannt

Fragen zu Tkinter.
Antworten
JackBauer
User
Beiträge: 9
Registriert: Mittwoch 21. Juni 2006, 14:16
Wohnort: Berlin
Kontaktdaten:

Montag 10. Juli 2006, 00:31

Hallo,

ich verstehe die Welt nicht mehr. Ich habe ein riesiges Problem, kann es aber nicht fassen. Es geht um die Implementierung von Bilddateien.

Ich benutze hierfür das Modul PIL, welches sich als sehr hilfreich erwiesen hat. Das Problem liegt allerdings darin, dass eine beliebige Bilddatei einfach nicht erkannt wird. Obwohl sie im richtigen Ordner ist.

Programmauszug:

Code: Alles auswählen

######################## -- Logo -- ########################

        self.logo_b=Image.open("images\logo.gif")
        self.logo=ImageTk.PhotoImage(self.logo_b)
        self.logo_la=Label(image=self.logo,bg="#3E0201")
        self.logo_la.place(relx=0.35,rely=0.3)

        self.willko=Label(text="Herzlich Willkommen bei Monopoly!", font=("sylfaen 12 bold"),fg="white",bg="#3E0201")
        self.willko.place(relx=0.38,rely=0.45)


######################## -- Buttons -- ########################

        self.neuesSpiel_b=Image.open("images\ngb.GIF")
        #self.neuesSpiel_b=self.neuesSpiel_b.resize((180,80))
        self.neuesSpielimage=ImageTk.PhotoImage(self.neuesSpiel_b)
        
        self.spielLaden_b=Image.open("images\slb.gif")
        self.spielLadenimage=ImageTk.PhotoImage(self.spielLaden_b)
        
        self.HOFimage_b=Image.open("images\hofb.gif")
        #self.neuesSpiel_b=self.neuesSpiel_b.resize((180,80))
        self.HOFimage=ImageTk.PhotoImage(self.HOFimage_b)

        self.newgamebu=Button(text="Neues Spiel",image=self.neuesSpielimage,bg="#3E0201",relief=FLAT)
        self.loadgamebu=Button(text="Spiel Laden",image=self.spielLadenimage,bg="#3E0201",relief=FLAT)
        self.highscoreebu=Button(text="Hall of Fame",image=self.HOFimage,bg="#3E0201",relief=FLAT)

        self.newgamebu.place(x=300,y=500)
        self.loadgamebu.place(x=500,y=500)
        self.highscoreebu.place(x=700,y=500)

Bei dem ersten Bild funktioniert auch alles, es kommt keine Fehlermeldung, sondern wird richtig dargestellt. Beim nächsten Bild funktioniert jedoch nichts mehr und ich bekomme diese Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "E:\Informatik\monopolygui.py", line 120, in ?
    window=monopolygui()
  File "E:\Informatik\monopolygui.py", line 86, in __init__
    self.neuesSpiel_b=Image.open("images\ngb.GIF")
  File "C:\Programme\Python24\Lib\site-packages\PIL\Image.py", line 1717, in open
    fp = __builtin__.open(fp, "rb")
IOError: [Errno 2] No such file or directory: 'images\ngb.GIF'
Das total kranke an der Geschichte ist jetzt: Wenn ich die Datei "ngb.gif" in "lost.gif" umbenenne, dann geht es! Ich weiß echt nicht, was ich dazu sagen soll! Mir fehlen echt die Worte. Es funktionieren dann auch tatsächlich alle anderen Bilder!

Vielleicht bin ich auch einfach nur zu dumm, um es zu sehen .. aber???!

Danke im voraus und bitte nicht knechten, wenns ein dummer Fehler ist!

MFG Bauer
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 10. Juli 2006, 04:55

Hi!

Könnte es vielleicht daran liegen, dass die Datei ngb.gif heisst, und nicht ngb.GIF ?

Gruß, mawe
BlackJack

Montag 10. Juli 2006, 09:40

Es liegt an dem Zeilenumbruch im Dateinamen. Jedenfalls der Name den er angibt: 'images\ngb.GIF'.

Die Zeichenfolge '\n' ist *ein* Zeichen und zwar ein Zeilenumbruch. Um einen rückwärtsgerichteten Schrägstrich zu bekommen, muss man entweder den Backslash verdoppeln oder einen Raw-String mit einem 'r' davor benutzen.

Bei Pfadangaben ist aber die sauberste Lösung `os.path.join()` zu benutzen. Dann funktioniert's auch plattformübergreifend:

Code: Alles auswählen

self.neues_spiel_b = Image.open(os.path.join('images', 'ngb.GIF')
JackBauer
User
Beiträge: 9
Registriert: Mittwoch 21. Juni 2006, 14:16
Wohnort: Berlin
Kontaktdaten:

Montag 10. Juli 2006, 11:20

Danke!! Das isses! Das ergibt dann auch total Sinn!!!

Ein dickes Dankeschön zurück:D


MFG Bauer
Antworten