Bilder einfügen mit Canvas

Fragen zu Tkinter.
Antworten
Emilia
User
Beiträge: 1
Registriert: Donnerstag 19. März 2020, 20:49

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()
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

`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.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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