JPEG Bild in Python als Hintergrund einfügen
Ich habe die Aufgabe ein spiel zu programmieren in dem man eine Turtle durch ein Labyrinth steuert. Ich habe mir mit Gimp eine JPEG Datei erstellt um die pixel werte auszulesen und mit dem der Turtle abzugleichen. (Ob das funktioniert weiß ich noch nicht)
In der Schule haben wir gelernt wie man GIFs in den Hintergrund einfügt. Da ich aber ein JPEG habe ist das problematisch. Ich konnte aherausfinden das ich Tkinter benutzen muss, doch aus den Codes die ich finde werde ich nicht schlau. Meine Aufgabe ist es meine Shcritte erklären zu können also falls es geht nicht so kompliziert.
LG Freddy
In der Schule haben wir gelernt wie man GIFs in den Hintergrund einfügt. Da ich aber ein JPEG habe ist das problematisch. Ich konnte aherausfinden das ich Tkinter benutzen muss, doch aus den Codes die ich finde werde ich nicht schlau. Meine Aufgabe ist es meine Shcritte erklären zu können also falls es geht nicht so kompliziert.
LG Freddy
Wir haben immer folgenden Code verwende:
Damit funktoniert GIF zwar aber bei JPEG Datei ist das nicht möglich.
Code: Alles auswählen
bs=Screen()
bs.register_shape("xxx.gif")
bs.bgpic("xxx.gif")
Vllt könnstest du ja meine Frage richtig lesen. JPEG in GIF umwandeln ist keine Lösung für mein Problem. Meine Frage war eigentlich nur wie ich JPEGs bei PYTHON in den Hintergrund bekomme. Jetzt sind wir dabei angelangt zu diskutieren was bs ist usw. Das ist nur leider irrelevant für mein Problem. Falls ihr mir helfen wollt dann könnt ihr mir ja vllt verraten wie das funktioniert oder OB das überhaupt funktioniert.
Achso, ist also mein Fehler, dass du nicht sagst, dass du JPEGS zwingend brauchst (lese ich nirgendwo in deiner Frage, da steht nur du hast eines), und das ich nicht aus 3 Zeilen Code ohne Kontext magisch erraten kann, was genau dieses bs ist, welches du benutzt.
Wenn du mal deinen Browser bemuehst (du hast ja einen, um hier zu posten) und im Suchfeld "tkinter jpeg" eingibst, dann bist du nicht auf uns hier angewiesen, und kannst dir in Zukunft einfach deine Fragen selbst beantworten, ok?
Das ein JPEG eine Scheiss-Idee ist fuer ein Spiel bei dem man praeziese Positionen aus einer Grafik ableiten will, weil es durch Kompressionsartefakte unscharf wird,ist ein kleiner Gratishinweis zum Abschied.
Wenn du mal deinen Browser bemuehst (du hast ja einen, um hier zu posten) und im Suchfeld "tkinter jpeg" eingibst, dann bist du nicht auf uns hier angewiesen, und kannst dir in Zukunft einfach deine Fragen selbst beantworten, ok?
Das ein JPEG eine Scheiss-Idee ist fuer ein Spiel bei dem man praeziese Positionen aus einer Grafik ableiten will, weil es durch Kompressionsartefakte unscharf wird,ist ein kleiner Gratishinweis zum Abschied.
Abschließend zu dieser Diskussion möchte ich noch ein paar Dinge klarstellen. Ich kann nämlich sehen das ich mich nicht sonderlich klar geäußert habe bzw. einige Angaben vergessen habe. Allerdings bin ich der Meinung das man meine Frage aus dem Text herauslesen kann und der Rest nur kleine und unwichtige erklärungen sind. Ihre aussagen sind leider allesamt auf "bs" und "gif" bezogen. In restlichen Teil ihrer beiträge, die mir nicht geholfen haben mein Problem zu lösen, geben sie leider nur unnützes Zeug von sich. Meine Frage, wie ich mit TKinter JPEG Dateien in den Hintergrund setzen kann, haben sie leider Ignoriert. Anstatt mir zu sagen das sie nicht mehr Ahnung von Tkinter haben als ich, mussten sie auf schlau machen.Ich hoffe das sie in ihrem nächsten Kommentar Kompetenz beweisen können. Denn leider wurde ich das erstemal von einem Forenmitglied entäuscht. Selbst bei gutefrage.net hatte ich noch nie einen so inkompetenten und unhöfflichen User wie sie. Ich wünsche ihnen noch ein schönes Wochenende.
MFG Freddy
MFG Freddy
Hi Freddyyy
Die fogenden drei Zeilen:
a)
bs=Screen()
Du erstellst eine Oberfläche(Fenster) um darauf ein Hintergrundbild zu platzieren.
b)
bs.bgpic("xxx.gif")
Ist das Hintergrundbild im .gif-Format, welches du auf dieser Oberfläche platzieren willst.
c)
bs.register_shape("xxx.gif")
Ist das Symbolbild für deine Turtle im .gif-Format, welche du auf deinem Hintergrundbild platzieren möchtest.
d)
Die .gif's willst du durch .jpeg's ersetzen und das ganze mit einem Tkinter-Skript realisieren.
Damit Tkinter mit .jpeg's umgehen kann braucht er hierfür das PIL-Modul. Das folgende Skript zeigt eine Variante wie dass ganze mit Tkinter aufgesetzt werden könnte:Grus wuf
Die fogenden drei Zeilen:
interpretiere ich wie folgt:bs=Screen()
bs.register_shape("xxx.gif")
bs.bgpic("xxx.gif")
a)
bs=Screen()
Du erstellst eine Oberfläche(Fenster) um darauf ein Hintergrundbild zu platzieren.
b)
bs.bgpic("xxx.gif")
Ist das Hintergrundbild im .gif-Format, welches du auf dieser Oberfläche platzieren willst.
c)
bs.register_shape("xxx.gif")
Ist das Symbolbild für deine Turtle im .gif-Format, welche du auf deinem Hintergrundbild platzieren möchtest.
d)
Die .gif's willst du durch .jpeg's ersetzen und das ganze mit einem Tkinter-Skript realisieren.
Damit Tkinter mit .jpeg's umgehen kann braucht er hierfür das PIL-Modul. Das folgende Skript zeigt eine Variante wie dass ganze mit Tkinter aufgesetzt werden könnte:
Code: Alles auswählen
import tkinter as tk
from PIL import Image, ImageTk
APP_TITLE = "JPEG-Hintergrund"
app_win = tk.Tk()
app_win.title(APP_TITLE)
# Erzeugt das Hintegrund PIL-Bildobjekt
pil_background_image = Image.open("hintergrund.jpg")
# Konvertiert das Hintegrund PIL-Bildobjekt zum Tk-Bildobjekt
app_win.tk_background_image = ImageTk.PhotoImage(pil_background_image)
# Erzeugt das Turtle PIL-Bildobjekt
pil_turtle_image = Image.open("turtle.jpg")
# Konvertiert das Turtle PIL-Bildobjekt zum Tk-Bildobjekt
app_win.tk_turtle_image = ImageTk.PhotoImage(pil_turtle_image)
# Abmessungen des Hintergrundbildes
width = app_win.tk_background_image.width()
height = app_win.tk_background_image.height()
# Erzeuge Bildfläche für das ablegen des Hintergrundbildes
canvas = tk.Canvas(app_win, width=width, height=height, highlightthickness=0)
canvas.pack()
# Legt das Hintegrundbild auf die Bildfläche
canvas.create_image(0, 0, image=app_win.tk_background_image, anchor='nw',
tag="Hintergrund")
# Lege die Turle auf das Hintergrundbild
canvas.create_image(10, 10, image=app_win.tk_turtle_image, anchor='nw',
tag="Turtle")
app_win.mainloop()
Take it easy Mates!
Ich antworte jetzt mal bewusst so, wie man sonst in den frühen Nullerjahren in einem Forum darauf geantwortet hätte:Freddyyy hat geschrieben:Vllt könnstest du ja meine Frage richtig lesen. JPEG in GIF umwandeln ist keine Lösung für mein Problem. Meine Frage war eigentlich nur wie ich JPEGs bei PYTHON in den Hintergrund bekomme.
Dann mach nächstes Mal verdammtnochmal klar, dass du (aus welchen Gründen auch immer) dein JPEG-Bild nicht in ein GIF-Bild umwandeln kannst oder willst. Woher sollen andere das wissen, dass das bei dir (wie gesagt: Aus welchen Gründen auch immer, sei dir überlassen) nicht zur Lösung beiträgt? Und dann noch die Beleidigte Leberwurst spielen, weil statt einer angedachten eine alternative Lösung präsentiert wurde, von der vorher nicht klar war, dass sie bei dir (aus. welchen. Gründen. auch. immer.) nicht beiträgt.
Ernsthaft, woher kommt eigentlich die in letzter Zeit vermehrt auftretende Einstellung von manchem Fragesteller (nicht speziell hier im Forum bezogen, aber in anderen Programmierforen erlebe ich das auch zunehmend öfters), gleich die Frust in Richtung Helfer abzulassen? Glücklicherweise sind nicht alle Fragensteller so drauf, ansonsten hätte ich längst die Lust verloren, mich überhaupt helfend in einem Forum zu beteiligen.
Aber umgekehrt erwarten, dass einem sämtliche relevanten Infos aus der Nase gezogen werden... Ne, echt nicht. Es ist Aufgabe des Fragestellers, wenigstens alle kontextbezogenen Infos zu liefern bei dem Problem, was er gern gelöst haben möchte. Wer sich ernsthaft beleidigt fühlt, dass er einen Quellcode postet dessen verwendeten Module nicht ersichtlich sind und deswegen (wie Sirius3) nachfragen muss, braucht sich nicht zu wundern, wenn die Antworten entsprechend ausfallen. Mann mann mann...
(An der Stelle bin ich gespannt, ob sich jemand im "Tonfall/Stil der Antworten"-Thread melden wird...)
EDIT: Eines noch:
Sind sie nicht. Nur um das mal unmissverständlich gesagt zu haben.Freddyyy hat geschrieben:Allerdings bin ich der Meinung das man meine Frage aus dem Text herauslesen kann und der Rest nur kleine und unwichtige erklärungen sind.
Vielleicht ist es wieder Zeit, auf einen Klassiker hinzuweisen:
http://www.catb.org/esr/faqs/smart-questions.html
Gibt es auch auf deutsch:
https://tty1.net/smart-questions_de.html
http://www.catb.org/esr/faqs/smart-questions.html
Gibt es auch auf deutsch:
https://tty1.net/smart-questions_de.html
Zu:
Das ist ja richtig beschämend - aber nur für DICH.
Du bist ganz sicher derjenige, auf den DEINE Attribute "inkompetenten ... und unhöfflich"
am besten zutreffen.
Ich hoffe, dass du dem Rat von kbr gefolgt bist - und dort vielleicht sogar etwasgelernt hast:
"Vielleicht ist es wieder Zeit, auf einen Klassiker hinzuweisen:
http://www.catb.org/esr/faqs/smart-questions.html"
So viel Unqualifiziertes habe ich glücklicherweise ganz lange nicht mehr gelesen !Freddyyy hat geschrieben:Abschließend zu dieser Diskussion möchte ich noch ein paar Dinge klarstellen. Ich kann nämlich sehen das ich mich nicht sonderlich klar geäußert habe bzw. einige Angaben vergessen habe. Allerdings bin ich der Meinung das ...inkompetenten ... und unhöfflichen User ...
MFG Freddy
Das ist ja richtig beschämend - aber nur für DICH.
Du bist ganz sicher derjenige, auf den DEINE Attribute "inkompetenten ... und unhöfflich"
am besten zutreffen.
Ich hoffe, dass du dem Rat von kbr gefolgt bist - und dort vielleicht sogar etwasgelernt hast:
"Vielleicht ist es wieder Zeit, auf einen Klassiker hinzuweisen:
http://www.catb.org/esr/faqs/smart-questions.html"
Im nachhinein muss ich mich entschuldigen, dafür das ich mich nicht angemessen verhalten habe.
Trotzdem Danke das mir wuf noch geholfen hat. Bin wohl etwas andere umstände gewohnt.
(wuf hat aber im übrigen mein anliegen verstanden)
Trotzdem Danke das mir wuf noch geholfen hat. Bin wohl etwas andere umstände gewohnt.
(wuf hat aber im übrigen mein anliegen verstanden)
-
- User
- Beiträge: 9
- Registriert: Samstag 10. Februar 2018, 19:28
Hallo @all,
ich habe ein ähnliches Problem mit den .jpegs, das Modul PIL kennt aber mein Mac nicht :
Traceback (most recent call last):
File "Class_Schalter_Tkinter_Mac_F1.py", line 6, in <module>
from PIL import Image, ImageTk
ImportError: No module named PIL
------------------
(program exited with code: 1)
Press return to continue
kann mir jemand verraten, wo ich das her bekomme ?
Vielen Dank ! H.Lech
ich habe ein ähnliches Problem mit den .jpegs, das Modul PIL kennt aber mein Mac nicht :
Traceback (most recent call last):
File "Class_Schalter_Tkinter_Mac_F1.py", line 6, in <module>
from PIL import Image, ImageTk
ImportError: No module named PIL
------------------
(program exited with code: 1)
Press return to continue
kann mir jemand verraten, wo ich das her bekomme ?
Vielen Dank ! H.Lech
Es gibt ein Paket namens "Pillow", was sich mit dem "pip"-Befehl, der bei der Python-Installation mitgeliefert wird, ganz leicht installieren lassen soll:(Achtung: Groß-/Kleinschreibung ist hier wichtig; nicht "pillow", sondern "Pillow" (großes P))
Evtl. muss das in einem Befehlszeilenfenster mit erhöhten Rechten eingegeben werden (so wie unter Windows mit Administratorrechten; ich kenne mich mit Macs leider nicht aus, finde in Google aber überall dieses Ergebnis...)
Code: Alles auswählen
pip install Pillow
Evtl. muss das in einem Befehlszeilenfenster mit erhöhten Rechten eingegeben werden (so wie unter Windows mit Administratorrechten; ich kenne mich mit Macs leider nicht aus, finde in Google aber überall dieses Ergebnis...)
-
- User
- Beiträge: 9
- Registriert: Samstag 10. Februar 2018, 19:28
Hallo Astorek,
danke ! Hilft mir schon weiter ! Außerdem habe ich noch Python unter Raspbian, da kann ich das so verwenden.
danke ! Hilft mir schon weiter ! Außerdem habe ich noch Python unter Raspbian, da kann ich das so verwenden.
Huhu,wuf hat geschrieben: ↑Samstag 28. April 2018, 11:46 Hi Freddyyy
Die fogenden drei Zeilen:interpretiere ich wie folgt:bs=Screen()
bs.register_shape("xxx.gif")
bs.bgpic("xxx.gif")
a)
bs=Screen()
Du erstellst eine Oberfläche(Fenster) um darauf ein Hintergrundbild zu platzieren.
b)
bs.bgpic("xxx.gif")
Ist das Hintergrundbild im .gif-Format, welches du auf dieser Oberfläche platzieren willst.
c)
bs.register_shape("xxx.gif")
Ist das Symbolbild für deine Turtle im .gif-Format, welche du auf deinem Hintergrundbild platzieren möchtest.
d)
Die .gif's willst du durch .jpeg's ersetzen und das ganze mit einem Tkinter-Skript realisieren.
Damit Tkinter mit .jpeg's umgehen kann braucht er hierfür das PIL-Modul. Das folgende Skript zeigt eine Variante wie dass ganze mit Tkinter aufgesetzt werden könnte:Grus wufCode: Alles auswählen
import tkinter as tk from PIL import Image, ImageTk APP_TITLE = "JPEG-Hintergrund" app_win = tk.Tk() app_win.title(APP_TITLE) # Erzeugt das Hintegrund PIL-Bildobjekt pil_background_image = Image.open("hintergrund.jpg") # Konvertiert das Hintegrund PIL-Bildobjekt zum Tk-Bildobjekt app_win.tk_background_image = ImageTk.PhotoImage(pil_background_image) # Erzeugt das Turtle PIL-Bildobjekt pil_turtle_image = Image.open("turtle.jpg") # Konvertiert das Turtle PIL-Bildobjekt zum Tk-Bildobjekt app_win.tk_turtle_image = ImageTk.PhotoImage(pil_turtle_image) # Abmessungen des Hintergrundbildes width = app_win.tk_background_image.width() height = app_win.tk_background_image.height() # Erzeuge Bildfläche für das ablegen des Hintergrundbildes canvas = tk.Canvas(app_win, width=width, height=height, highlightthickness=0) canvas.pack() # Legt das Hintegrundbild auf die Bildfläche canvas.create_image(0, 0, image=app_win.tk_background_image, anchor='nw', tag="Hintergrund") # Lege die Turle auf das Hintergrundbild canvas.create_image(10, 10, image=app_win.tk_turtle_image, anchor='nw', tag="Turtle") app_win.mainloop()
ich habe mir mal dieses Programm abgetippt, das ist auch für mich nützlich ^^
so, aber ich habe versucht zum testen einen button drauf zu legen, mein ganzer Code (er ist einfacher gemacht als der oben) sieht dann so aus:
Code: Alles auswählen
import tkinter as tk
from PIL import Image, ImageTk
APP_TITLE = "JPEG-Hintergrund"
app_win = tk.Tk()
app_win.title(APP_TITLE)
pil_background_image = Image.open("talion.jpg")
app_win.tk_background_image = ImageTk.PhotoImage(pil_background_image)
width = app_win.tk_background_image.width()
height = app_win.tk_background_image.height()
canvas = tk.Canvas(app_win, width=width, height=height, highlightthickness=0)
canvas.pack()
canvas.create_image(0, 0, image=app_win.tk_background_image, anchor='nw', tag="Hintertgrund")
def Test():
messagebox.showinfo(message="Test!")
button = Button(app_win, text="Testen!", command=Test, height = 10, width = 20)
button.pack()
app_win.mainloop()
Jemand ne Ahnung warum???
wenn ich am Anfang des Programms, so kenns ich von früher, einfach hinschreibe "from tkinter import *" kommt als Fehlercode raus AttributeError: type object 'Image' has no attribute 'open'
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Hauptsache er funkt!
Button ist aus tkinter, und das wird als tk importiert. Du musst also tk.Button schreiben. Und Sternchenimporte sollte man genau aus dem Grund vermeiden, den du gerade erlebst: das Modul tkinter enthaelt eine Klasse Image. Das ist aber eine ganz andere als die, die du brauchst, und die aus PIL kommt. Aber durch deinen ueberbuegelnden import ist dir das nicht aufgefallen, und du importierst die falsche Klasse.
Darum NIEMALS
machen! Sondern immer explizit was du brauchst importieren. Das kann man dann auch zur Not umbenennen. Zb
wenn es sein muss. Allerdings ist der
Ansatz ehr besser.
Darum NIEMALS
Code: Alles auswählen
from irgendwas import *
Code: Alles auswählen
from tkinter import Image as tkImage
Code: Alles auswählen
import tkinter as tk
Ahh vielen Dank, ich mach das mit den * eh nur weil ich des in so vielen Tutorials zu tkinter lese, aber dann machs ich jetzt präziser!__deets__ hat geschrieben: ↑Freitag 18. Mai 2018, 15:31 Button ist aus tkinter, und das wird als tk importiert. Du musst also tk.Button schreiben. Und Sternchenimporte sollte man genau aus dem Grund vermeiden, den du gerade erlebst: das Modul tkinter enthaelt eine Klasse Image. Das ist aber eine ganz andere als die, die du brauchst, und die aus PIL kommt. Aber durch deinen ueberbuegelnden import ist dir das nicht aufgefallen, und du importierst die falsche Klasse.
Darum NIEMALS
machen! Sondern immer explizit was du brauchst importieren. Das kann man dann auch zur Not umbenennen. ZbCode: Alles auswählen
from irgendwas import *
wenn es sein muss. Allerdings ist derCode: Alles auswählen
from tkinter import Image as tkImage
Ansatz ehr besser.Code: Alles auswählen
import tkinter as tk
Aber nichts desto trotz, auch mit tk.Button klappts nicht...zwar sind die Error jetzt weg, aber der Button wird immer noch nicht angezeigt... hier nochma der überarbeitete code:
Code: Alles auswählen
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import messagebox
APP_TITLE = "JPEG-Hintergrund"
app_win = tk.Tk()
app_win.title(APP_TITLE)
pil_background_image = Image.open("talion.jpg")
app_win.tk_background_image = ImageTk.PhotoImage(pil_background_image)
width = app_win.tk_background_image.width()
height = app_win.tk_background_image.height()
canvas = tk.Canvas(app_win, width=width, height=height, highlightthickness=0)
canvas.pack()
canvas.create_image(0, 0, image=app_win.tk_background_image, anchor='nw', tag="Hintertgrund")
def Test():
messagebox.showinfo(message="Test!")
button = tk.Button(app_win, text="Testen!", command=Test, height = 1, width = 12)
button.pack()
button.config(background='white', foreground='white')
app_win.mainloop()
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Hauptsache er funkt!
Hi Phobit
Funktioniert es so besser?:
Gruss wuf
Funktioniert es so besser?:
Code: Alles auswählen
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import messagebox
APP_TITLE = "JPEG-Hintergrund"
app_win = tk.Tk()
app_win.title(APP_TITLE)
pil_background_image = Image.open("talion.jpg")
app_win.tk_background_image = ImageTk.PhotoImage(pil_background_image)
width = app_win.tk_background_image.width()
height = app_win.tk_background_image.height()
canvas = tk.Canvas(app_win, width=width, height=height, highlightthickness=0)
canvas.pack()
canvas.create_image(0, 0, image=app_win.tk_background_image, anchor='nw', tag="Hintertgrund")
def Test():
messagebox.showinfo(message="Test!")
button = tk.Button(app_win, text="Testen!", command=Test, height = 1, width = 12)
button.config(background='white', foreground='white')
canvas.create_window(20, 20, window=button, anchor='nw')
app_win.mainloop()
Take it easy Mates!