Bilder werden nicht gefunden

Fragen zu Tkinter.
Antworten
Orline
User
Beiträge: 3
Registriert: Freitag 18. Dezember 2015, 19:00

Hallo und ein gesundes neues Jahr

ich besitze seit drei Wochen einen Raspberry und beschäftige mich genau so lange mit Python. Natürlich habe ich noch 1000 Fragezeichen, finde mich aber langsam hinein.
Zu meinem Projekt, meine bestehende Modellbahnsteuerung möchte ich mit dem Raspi aufwerten und möchte in Zukunft den PC der Steuerung teilweise oder ganz durch den Raspi ersetzen. Für die Steuerung habe ich ein Pollin-Display gekauft.
Mein Programm der Steuerung, macht auch bereits große Fortschritte. Der gezeigte Bildschirm dient nur der Überwachung. Dort werden die eingestellten Fahrstraßen angezeigt und Rückmeldungen über besetzte Gleise angezeigt. Soweit kein Problem. Weitere Fenster werden dann für die Bedienung der Steuerung mit Toplevel angezeigt.

Nun zu meinem Problem, ich schreibe meine Skripte auf dem PC unter Win10 und schiebe das Skript dann auf den Raspi. Auch kein Problem.

Nun bin ich dabei meine Fahrregler in die Steuerung einzubinden. Jedem Fahrregler kann ich die Daten von bis zu Fünf Loks zuweisen, wobei die gerad aktive Lok, als ein Bild angezeigt werden soll. In dem Skript unter Win10 läuft das tadellos, ohne Fehlermeldung.

Bild

Auf dem Raspi werden die Bilder nicht gefunden. Ich habe sie im Benutzerorden /home/pi, aber auch im Ordner Pictures gelegt. Ohne Erfolg. Ich bekomme immer eine Fehlermeldung.

Bild

Bild

Meinen gesamten Code hier zu zeigen würde zu groß werden und so zeige ich nur die beiden wichtigen Abschnitte aus meinem Code, zum anzeigen des Bildes in einem Label. Wie gesagt in Win10 kein Problem.

Code: Alles auswählen


from tkinter import *
import os, sys, time

fenster = Tk()                  #Erzeugung eines Fensters
fenster.title("Stellwerk")      #Fenster Titel
fenster.geometry("1200x600")     #Fenster Größe

   
zeichner = Canvas(fenster)


#*****************************************************************************
# Code zum Bild anzeigen, restlicher Code ausgeblendet!
#*****************************************************************************


Bfeld1 = Label(fenster)
im1 = PhotoImage(file="skl.gif")
Bfeld1["image"] = im1
Bfeld1.place(x=840, y=10, width = 150, height=150)

Bfeld2 = Label(fenster)
im2 = PhotoImage(file="111.gif")
Bfeld2["image"] = im2
Bfeld2.place(x=1010, y=10, width = 150, height=150)
Hat jemand einen Tipp wo ich die Bilder speichern muss, das der Raspi die Bilder auch findet?

Viele Grüße
Rolf
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen im Forum und zu Python!

Das Problem ist, dass du relative Pfade benutzt und damit wird die Datei relativ zum Arbeitsverzeichnis (wo das Programm gestartet wurde) gesucht.
Wenn die Dateien im selben Verzeichnis liegen, wie das Programm, hilft dir die `__file__` Variable, in der Pfad zum Modul steht, damit kannst du einen absoluten Pfad basteln:

Code: Alles auswählen

os.path.join(os.path.dirname(__file__), "datei.name")
Orline
User
Beiträge: 3
Registriert: Freitag 18. Dezember 2015, 19:00

Hallo cofi

danke das war der Hinweis den ich brauchte. Ich versuche nun die Zusammenhänge zu verstehen und habe mit google ein wehnig gesucht und bin auf diese Seite http://halvar.at/python/programmpfade_ermitteln/ gestoßen.
Dort habe ich erst ein wenig experimentiert, dabei habe ich den Ptad ermittelt und mit der ersten Bild verknüpft.
BUMS, :D es wurde angezeigt. Seltsamer Weise wurde nun das zweite Bild auch angezeigt, obwohl dieses mit dem Pfad garnicht verknüpft war. Seltsam. :?: Also habe ich weiter experimentiert und habe herausgefunden, ich brauche Python mit dem Befehl "os.path.dirname(os.path.abspath(__file__))" nur einmal den aktuellen Pfad übergeben und danach werden auch alle Bilder gefunden.

Mein Code sieht nun so aus.

Code: Alles auswählen

os.path.dirname(os.path.abspath(__file__))

Bfeld1 = Label(fenster)
im1 = PhotoImage(file="SKL.gif")
Bfeld1["image"] = im1
Bfeld1.place(x=840, y=10, width = 150, height=150)

Bfeld2 = Label(fenster)
im2 = PhotoImage(file="111.gif")
Bfeld2["image"] = im2
Bfeld2.place(x=1010, y=10, width = 150, height=150)
So läuft mein Skript unter Win10 und auch auf dem Raspi.
Die Zusammenhänge sind mir noch nicht ganz klar, aber ich kann erst mal weiter arbeiten.

Natürlich werde ich mich mit dem Thema "Programmpfade" weiter beschäftigen, um den Durchbick zu bekommen.

Danke
Gruß Rolf
BlackJack

@Orline: Das kann nicht sein. Die erste Zeile hat keinen Effekt auf das Programm. Du wirst irgendetwas anderes anders gemacht haben, zum Beispiel das Programm aus dem Verzeichnis heraus gestartet haben in dem die Bilder liegen. Denn dann sind die natürlich auch über den reinen Dateinamen erreichbar.
Orline
User
Beiträge: 3
Registriert: Freitag 18. Dezember 2015, 19:00

Hallo BlackJack
stimmt ich habe noch etwas anderes gemacht. Ich habe mir gestern Abend, aus einem anderen Grund, eine neue SD-Karte mit Raspbian gemacht. Mit dieser habe ich dann heute, nach den vor hin beschriebenen Versuchen unter Win10, das Skript und die Bilder in den Ordner home/pi/ geschoben und gestartet. Wie beschrieben lief das Skript fehlerfrei. Nun habe ich die Zeile auskommentiert und es läuft immer noch. Also richtig die Zeile macht absolut nichts. (Nicht mal eine Fehlermeldung).

Somit wär erstmal meine Frage von Oben >Bilder werden nicht angezeigt< gelöst.

Nun habe ich die alte SD-karte rein gesteckt und siehe da, die Bilder kommen nicht und ich habe wider den selben Fehler. Nun habe ich bevor ich irgendwelche Änderungen an der SD-Karte mache, ein Backup von dieser gemacht, um den Fehler jederzeit wieder nachvollziehen zu können.
Nun habe ich alles versucht, aber die Bilder werden mit dieser Karte einfach nicht angezeigt. Also liegt es nicht an dem Skript, sondern es hat eine völlig ander Ursache. Welche ist mir absolut nicht klar.

Wenn ich eine vernünftige Ursache oder eine Lösung für den Fehler habe werde ich darüber berichten.

Gruß Rolf
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wie BlackJack schon sagte: Das funktioniert so nicht. Und die Ursache ist immernoch dieselbe: Du musst die Dateinamen der Bilder ersetzen.

Warum es mit der 2. SD-Karte funktioniert hat beschreibst du ja selbst: Die Bilder lagen im Home Verzeichnis, das mit groesster Wahrscheinlichkeit eben das Arbeitsverzeichnis war.
Antworten