Tkinter App, Turtle ein JPG Skin zuweisen
Hi Freddyyy
Zuerst noch das erweiterte Skript mit der Turtle, welche bis jetzt auf dem Hintergrundbild noch nicht sichtbar war. Das Hintergrundbild wurde mit der Turtle eigenen Methode screen.bgpic erstellt. Die Turtle ist angehoben. Könntest du einmal die Bewegung der Turtle bei dir kontrollieren?:
Gruss wuf
Zuerst noch das erweiterte Skript mit der Turtle, welche bis jetzt auf dem Hintergrundbild noch nicht sichtbar war. Das Hintergrundbild wurde mit der Turtle eigenen Methode screen.bgpic erstellt. Die Turtle ist angehoben. Könntest du einmal die Bewegung der Turtle bei dir kontrollieren?:
Code: Alles auswählen
import turtle
MOVE_STEP = 10
TURN_ANGLE = 45
def forward():
turtle.forward(MOVE_STEP)
def backward():
turtle.backward(MOVE_STEP)
def left():
turtle.left(TURN_ANGLE)
def right():
turtle.right(TURN_ANGLE)
image_width = 1024 # Hier: Breite deines Hintergrundbides (Pixels)
image_height = 600 # Hier: Höhe deines Hintergrundbides (Pixels)
screen = turtle.Screen()
screen.setup(image_width, image_height)
screen.bgpic("hintergrundbild.gif")
turtle.penup()
turtle.speed(0)
turtle.home()
screen.onkey(forward, "Up")
screen.onkey(backward, "Down")
screen.onkey(left, "Left")
screen.onkey(right, "Right")
screen.listen()
turtle.mainloop()
Take it easy Mates!
Hi Freddyyy
Da ich noch nie etwas mit Turtle programmiert habe muss ich mich selber zuerst auf Google ein wenig schlau machen ausser du kannst mir schon verraten was setheading besser macht. (N.B. Wie du vielleicht bemerkt hast hatte bei meinem letzten Skript das Hintergrundbild .gif Format. Du kannst natürlich weiterhin das .png Format benutzen.
Apropos Bild im Forum platzieren. Eventuell kennt hier im Forum jemand eine gute Adresse bei welcher man nicht total mit Werbung zugedeckt wird.
Gruss wuf
Da ich noch nie etwas mit Turtle programmiert habe muss ich mich selber zuerst auf Google ein wenig schlau machen ausser du kannst mir schon verraten was setheading besser macht. (N.B. Wie du vielleicht bemerkt hast hatte bei meinem letzten Skript das Hintergrundbild .gif Format. Du kannst natürlich weiterhin das .png Format benutzen.
Apropos Bild im Forum platzieren. Eventuell kennt hier im Forum jemand eine gute Adresse bei welcher man nicht total mit Werbung zugedeckt wird.
Gruss wuf
Take it easy Mates!
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wuf: Es soll bei 'Left'' nach links gegangen werden und nicht links gedreht werden. Und bei 'Up' nicht vorwärts gegangen werden, sondern nach oben. Das ist nicht besser, sondern einfach nur anders anders.
Edit: Ich verwende Imgur.com um Bilder hoch zu laden. Keine Ahnung ob die Werbung haben — mit Werbeblocker-Plugin sehe ich keine. Und ohne Werbeblocker-Plugin mag ich mich nicht im Netz bewegen.
Edit: Ich verwende Imgur.com um Bilder hoch zu laden. Keine Ahnung ob die Werbung haben — mit Werbeblocker-Plugin sehe ich keine. Und ohne Werbeblocker-Plugin mag ich mich nicht im Netz bewegen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hi __blackjack__
Besten Dank für deine Tipps. Mit dem setheading muss ich noch ein wenig herumspielen.
Freddyyy du kannst ja einmal versuchen mittels der uns von __blackjack__ angegebenen Adresse Imgur.com dein Hindergrundbildchen in unser Forum hochzuladen.
Gruss wuf
Besten Dank für deine Tipps. Mit dem setheading muss ich noch ein wenig herumspielen.
Freddyyy du kannst ja einmal versuchen mittels der uns von __blackjack__ angegebenen Adresse Imgur.com dein Hindergrundbildchen in unser Forum hochzuladen.
Gruss wuf
Take it easy Mates!
Ich kan nirgendwie kein Konto bnei Imgur erstellen also habe ich das jetzt hier hin hoch geladen: https://picload.org/view/dopowplr/labyrinth.png.html.
Ic hahbe immer setheading benutzt weil sich die turtle dann in richtung 90° bewegt und nicht um 90°
LG Freddy
(sehe gerade das picload viel Werbung hat. Da funktioniert mein Addblocker nicht)
Ic hahbe immer setheading benutzt weil sich die turtle dann in richtung 90° bewegt und nicht um 90°
LG Freddy
(sehe gerade das picload viel Werbung hat. Da funktioniert mein Addblocker nicht)
Hi Freddyyy
Super!!! Konnte deine Labyrinth-Grafik labyrinth.png hier problemlos runter laden. Deine Bildübergabelösung ist keine schlechte. Unser Forumfenster wäre mit den Abmessungen des Bildes von 1000x1000 eventuell überladen worden. Ok! Ich habe mich ein wenig in Turtle eingearbeitet. Dabei ist folgendes Skript entstanden:
Habe es nur unter Ubuntu ausgetestet. Könntest du es bei dir einmal mit Windows 10 unter die Lupe nehmen? Da gibt es sicher noch gute Ideen um das Ganze zu verbessern. Noch eine Frage habe ich: Gibt es in Turtle eine Methode um die Pixelfarbe aus dem Bild, welches mit screen.bgpic angelegt wurde herauszulesen? Wäre dies nicht der Fall müsste man die Variante mit screen.getcanvas() ins Auge fassen. Good testing!
Gruss wuf
Super!!! Konnte deine Labyrinth-Grafik labyrinth.png hier problemlos runter laden. Deine Bildübergabelösung ist keine schlechte. Unser Forumfenster wäre mit den Abmessungen des Bildes von 1000x1000 eventuell überladen worden. Ok! Ich habe mich ein wenig in Turtle eingearbeitet. Dabei ist folgendes Skript entstanden:
Code: Alles auswählen
import turtle
NORTH = 90
SOUTH = 270
EAST = 0
WEST = 180
MOVE_STEP = 10
ANGLE_STEP = 90
def forward():
turtle.forward(MOVE_STEP)
def backward():
turtle.backward(MOVE_STEP)
def left():
angle = turtle.heading()
angle += ANGLE_STEP
turtle.setheading(angle)
def right():
angle = turtle.heading()
angle -= ANGLE_STEP
turtle.setheading(angle)
# Initial setup
image_width = 1000 # Hier: Breite deines Hintergrundbides (Pixels)
image_height = 1000 # Hier: Höhe deines Hintergrundbides (Pixels)
screen = turtle.Screen()
screen.setup(image_width, image_height)
screen.bgpic("labyrinth.png")
turtle.penup()
turtle.speed(0)
turtle.goto(0, 0)
turtle.setheading(EAST)
turtle.showturtle()
# Keyboard actions
screen.onkey(forward, "Up")
screen.onkey(backward, "Down")
screen.onkey(left, "Left")
screen.onkey(right, "Right")
screen.listen()
turtle.mainloop()
Gruss wuf
Take it easy Mates!
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wuf: Wie schon gesagt ist `bgpic()` eine ”Einbahnstrasse”. Man kann da nur einen Dateinamen übergeben, das `PhotoImage` bekommt man da nicht mehr raus ohne in den ”privaten” Teilen des `Screen`-Objekts herum zu pfuschen. Man könnte einfach mit dem Dateinamen noch mal ein `PhotoImage` erstellen, ausserhalb vom `Screen`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ok __blackjack__
Verstehe ich. Dann könnten die Pixelfarbwerte aus dem Tk-PhotoImage erstellten Bild mittels der PhotoImage-Methode get(x,y) synchron mit der umgerechneten Turtel-Koordinaten (Vier Quantranten) aus dem Bild (Ein Quadrant) herausgelesen werden. Sehe ich das richtig?
Gruss wuf
Verstehe ich. Dann könnten die Pixelfarbwerte aus dem Tk-PhotoImage erstellten Bild mittels der PhotoImage-Methode get(x,y) synchron mit der umgerechneten Turtel-Koordinaten (Vier Quantranten) aus dem Bild (Ein Quadrant) herausgelesen werden. Sehe ich das richtig?
Gruss wuf
Take it easy Mates!
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@wuf: Ja, das sollte möglich sein.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ok!
Dann würde das Skript angepasst mittels tk.PhotoImage extern erstelltem Bildobjekt wie folgt aussehen. Jetzt noch ohne Auslesung der Pixelfarbwerte :
Gruss wuf
Dann würde das Skript angepasst mittels tk.PhotoImage extern erstelltem Bildobjekt wie folgt aussehen. Jetzt noch ohne Auslesung der Pixelfarbwerte :
Code: Alles auswählen
import turtle
import tkinter as tk
NORTH = 90
SOUTH = 270
EAST = 0
WEST = 180
MOVE_STEP = 10
ANGLE_STEP = 90
def forward():
turtle.forward(MOVE_STEP)
def backward():
turtle.backward(MOVE_STEP)
def left():
angle = turtle.heading()
angle += ANGLE_STEP
turtle.setheading(angle)
def right():
angle = turtle.heading()
angle -= ANGLE_STEP
turtle.setheading(angle)
# Initial setup
screen = turtle.Screen()
bg_image = tk.PhotoImage(file="labyrinth.png")
bg_image_width = bg_image.width()
bg_image_height = bg_image.height()
#print("Grösse des Hintergrundbildes: {}x{}".format(
#bg_image_width, bg_image_height))
screen.setup(bg_image_width, bg_image_height)
canvas = screen.getcanvas()
canvas.create_image(0, 0, image=bg_image)
turtle.penup()
turtle.speed(0)
turtle.goto(0, 0)
turtle.setheading(EAST)
turtle.showturtle()
# Keyboard actions
screen.onkey(forward, "Up")
screen.onkey(backward, "Down")
screen.onkey(left, "Left")
screen.onkey(right, "Right")
screen.listen()
turtle.mainloop()
Take it easy Mates!
O kso funktioniert das schonmal besser. Ich werde jetzt mal eine while-schleife erstellen in der sich die Turtle immer um 3 nach vorne bewegt. Dabei wird immer die Pixel farbe mit getpixel() abgefragt. Welche Farbcodierung hat denn .png? Also was ist da schwarz und was weiß. Muss ich dei while-Shcleife innerhalb von 'mainloop()' schreiben?
Also die while-schleife muss wohl in die mainloop() Bei meinem Proframm gibt mir 'img.getpixel((x, y))' nur 0, 0, 0, 0. Wie kann ich das beheben?
Code: Alles auswählen
import turtle
import tkinter as tk
from PIL import Image, ImageTk
NORTH = 90
SOUTH = 270
EAST = 0
WEST = 180
MOVE_STEP = 10
ANGLE_STEP = 90
def forward():
turtle.setheading(NORTH)
def backward():
turtle.setheading(SOUTH)
def left():
angle = turtle.heading()
angle += ANGLE_STEP
turtle.setheading(angle)
def right():
angle = turtle.heading()
angle -= ANGLE_STEP
turtle.setheading(angle)
# Initial setup
screen = turtle.Screen()
bg_image = tk.PhotoImage(file="Labyrinth.png")
bg_image_width = bg_image.width()
bg_image_height = bg_image.height()
#print("Grösse des Hintergrundbildes: {}x{}".format(
#bg_image_width, bg_image_height))
screen.setup(bg_image_width, bg_image_height)
canvas = screen.getcanvas()
canvas.create_image(0, 0, image=bg_image)
turtle.penup()
turtle.speed(0)
turtle.goto(0, 0)
turtle.setheading(EAST)
turtle.showturtle()
# Keyboard actions
screen.listen()
screen.onkey(forward, "w")
screen.onkey(backward, "s")
screen.onkey(left, "a")
screen.onkey(right, "d")
fd = 1
x = turtle.xcor()
y = turtle.ycor()
ende = False
while not ende:
turtle.forward(fd)
img = Image.open("Labyrinth.png")
a = img.getpixel((x, y))
print(a)
screen.listen()
turtle.mainloop()
Ich habe mir jetzt mal eine komplett schwarzes Bild erstellt (Black.png) und für Labyrinth.png eingesetzt. Hier erhalte ich jetzt nur noch 3 Ziffern aber jede Ziffer hat den wert 0. Danach habe ich mir ein halb shwarz, halb weiß gefärbtes bild erstellt und hier bekam ich wieder nur 3 zahlen aber dafür hatten jetzt alle ziffern den wert 255. Ich bin jetzt wirklich verwirrt. 255 255 255 steht doch für weiß und 0 0 0 für Schwarz. Wieso verändern sich denn beim bewegen der turtle die Zahlen nicht?
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Freddyyy: Lass Dir mal die Werte von `x` und `y` ausgeben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Habe jetzt die Variablen x und y in die shcliefe gepackt. Jetzt bekomme ich vernünftige werte. Aber die werte stimmen nicht mit dem Bild überein. Also manchmal bekomme ich 0 0 0 0 obwohl ich auf einem weißen Feld bin und andersherum.