Seite 1 von 1

Bilder einfügen mit Canvas

Verfasst: Donnerstag 19. März 2020, 21:02
von Emilia
Hallo Ihr,
ich bin gerade dabei ein Programm zu Programmieren. Mein Problem ist ich bekomme kein Bild eingefügt :roll:
Ich hab euch mein Programm Anhang dazugepackt. Die Fehlermeldung ist immer wieder
couldn't open "image_PNG": no such file or directory
Ich hoffe Ihr könnt mir helfen :lol:
from tkinter import *
import tkinter as tk


Code: Alles auswählen

class Level1(Tk):
    def __init__(self,callbackquit):
        Tk.__init__(self)

        
        
        #Fenster
        ueberschrift = Label(master=self, text="Level 1", font = ("Arial",15))
        ueberschrift.pack(side=TOP)

        #Canvas
        canvas = Canvas(self,width=400, height= 200)
        canvas.pack()

        #bild einfügen
        self.img = PhotoImage(file='image_PNG')
        canvas.create_image(20,20,self.image==img, anchor=NW)
        

        #schalten
        tk.button = Button(master=self, text="schließen", command=quit)
        tk.button.pack(side=RIGHT)


#test
if __name__ == "__main__":
    from tkinter import messagebox
    def schalten():
        testrechner.destroy()
        pass
        
    testrechner = Level1(schalten)
    testrechner.mainloop()

Re: Bilder einfügen mit Canvas

Verfasst: Donnerstag 19. März 2020, 21:57
von Sirius3
`image_PNG` ist auch ein seltsamer Name für ein Bild. Und eine Datei mit solchem Namen liegt halt nicht im aktuellen Arbeitsverzeichnis. Das sagt die Fehlermeldung ja recht deutlich. Wo die Datei liegt oder wie sie heißt, kann man nicht aus dem Programmcode erschließen.

im if-name-main-Block sollte eigentlich nur ein Aufruf der main()-Funktion sein.
Importe gehören an den Anfang. Keine *-Importe, sondern nur den `import tkinter as tk`-Import nutzen. Nach Tk.__init__ sind zu viele Leerzeilen, die Kommentare verwirren mich mehr, als dass sie nützen: #Fenster über einem Label?
`self.image` wird nirgends definiert und als drittes Argument von create_image wird auch ein Bildobjekt erwartet und kein Wahrheitswert.
Ins Modul `tk` sollte man nicht irgendwelche Namen zusätzlich einbinden, `button` gehört da auf keinen Fall hin.

Re: Bilder einfügen mit Canvas

Verfasst: Freitag 20. März 2020, 09:25
von __deets__
Der Bildname ist in der Tat ungewoehnlich. Bist du sicher, dass du nicht "image.PNG" meinst? Mit Punkt als Trenner?

Und ein solcher relativer Dateiname ist immer problematisch, weil er nur aufgeloest werden kann relativ zum sogenannten Arbeitsverzeichnis (working directory). Das kann aber irgendwohin zeigen. Zu Test-Zwecken wuerde ich empfehlen, den Namen als vollen Pfad anzugeben. ACHTUNG: unter Windows sind die \ fuer die Pfadtrennung ein Problem, wenn du einen Pfad hast wie

"C:\Users\ich\mein-bild.png"

dann haben zb \m und andere Zeichenketten eine besondere Bedeutung. Du musst das verhindern, indem du zB einen raw-String benutzt:

r"C:\Users\ich\mein-bild.png"

Das lkeine r.