Tkinter App, Turtle ein JPG Skin zuweisen

Fragen zu Tkinter.
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Was sagst du denn zu dem Code:

Code: Alles auswählen

register_shape("Bild", Shape("image", img))
Was soll ich für "BIld" und was "image" eingeben soll?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn Du das für Python brauchst, kannst Du Dir ja Hy anschauen und es übersetzen. Es verwendet ja letztendlich die Python-Module, weil Hy ein Python-Programm ist und das übersetzte Hy-Programm auf der Python-Bytecode-VM ausgeführt wird.

Zu dem `register_shape()`-Code sage ich das der von Sirius3 ist und er den doch schon erklärt hat
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Ja aber ich verstehe nicht was ich für "Bild" und was ich für "image" einsetzen soll. Kannst du mir vllt eine bsp geben?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Du hast doch schon ein Beispiel *und* eine Beschreibung *und* Du kannst auch in der Dokumentation von `register_shape()` und `Shape` nachlesen was die Argumente bedeuten und welche Werte sie haben dürfen. Mit der Dokumentation zu `Shape` und Sirius3's Erklärung zu 'Bild' verstehe ich nicht was man da nicht verstehen kann und was ein weiteres Beispiel klarer machen sollte‽

Selbst ohne weitere Beispiele, was genau funktioniert denn an dem gegebenen Beispiel nicht? (Kleiner Tipp: Das funktioniert genau so wie's da steht! (Sofern `img` einen passenden Wert hat.))
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Sorry aber ich sehe manche beiträge nicht, also ich habe keien beschreibung und kein bsp. Da kommt immer deise Fehlermeldung:

Code: Alles auswählen

raise TurtleGraphicsError("There is no shape named %s" % name)
turtle.TurtleGraphicsError: There is no shape named pyimage2
Bei diesem Code:

Code: Alles auswählen

t = Turtle()
img = ImageTk.PhotoImage(Image.open("Turtle.png"))
register_shape("Bild", Shape("image", img))
t.shape(img)
Vllt stimmt ja was an meienem Code nicht oder ich habe einene Beitrag nicht erhalten. Aber so Funktioniert das nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Was heisst Du siehst manche Beiträge nicht? Hier sieht jeder die gleichen Beiträge. Es gibt hier keinen Beitrag im Forum den ich sehen kann und Du nicht, oder umgekehrt. Und das Beispiel hast Du selbst aus dem Beitrag von Sirius3 in Deinen kopiert, also musst Du den ja wohl auch gesehen haben. Zudem habe ich in meinem letzten Beitrag Beispiel und Erklärung/Antwort auf Deine Frage nach den Werten für 'Bild' und 'image' noch mal verlinkt. Einfach drauf klicken!

Die Fehlermeldung besteht ja nicht nur aus den beiden Zeilen, sondern enthält darüber auch noch den Traceback, wo die Zeile zu finden ist, welche die Ausnahme ausgelöst hat. Und das ist *nicht* die `register_shape()`-Zeile. Sondern die danach. Schau Dir mal die Dokumentation zu `shape()` und `register_shape()` an und überlege mal was Du da übergibst, und in wie weit das von der Dokumentation abweicht. Was ist `img` für ein Wert und welchen Datentyp hat der?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Bin gerade nicht zu Hause kann also nicht Probieren ob das Funktioniert. Ich denke der Felher liegt bei

Code: Alles auswählen

t.shape(img)
Also muss da anstatt von img "image" oder "Bild" einsetzen oder?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Was verstehst Du an der Beschreibung "Set turtle shape to shape with given name" nicht?
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Wo stehet "Set turtle shape to shape with given name"? Und wo habe ich einen "shape with given name"? CIh wieß das es im Turtle modul namen gibt di amn verwenden kann.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das steht in der Dokumentation von `shape()`. Das ist gleich der erste Halbsatz in der Beschreibung.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Ja habe ich gesehen beim suchen. Gut. Hilft mir aber nicht weiter. Ich laufe gerade auf dem Holzweg. Sorry wenn ich euch nerfe, bin aber mit Python relativ unerfahren. Bzw generell mit Programmiersprachen. Vllt könnt ihr mir ja einfach meien Fehler sagen und mir eine Veerbesserung geben.
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Ach und mit den Beiträgen, im Thema sind manche Beiträge ienfach nicht da und ich sehe sie dann erst wenn ich mir eure verschickten Beiträge ankucke was relativ unübersichtlich ist.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst du davon mal einen screenshot erstellen & posten? Das ist eher ungewoehnlich.
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Ok ich habes es herausgefunden. War wohl ein wenig blind.

Code: Alles auswählen

turtle.shape("Bild")
Wie verwende ich das jetzt mit bgpic? register_shape() geht ja jetzt nicht.
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

[img]C:\Users\Freddy\Documents\Screenshot.png[/img]

Also bei mir feheln hier mehrere Beiträge. Wenn ich dann aber spezifisch auf eienn antworte bekomme ich allo die danach verfasst wurden.
Wie kann ich hier mein Bild einfügen?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Lokale Dateien hier anzeigen zu wollen geht natuerlich nicht. Du musst das irgendwo hochladen, und dann verlinken. Das ist etwas aetzend, aber entzieht sich meiner Kontrolle.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das verwendest Du gar nicht mit `bgpic()`. Das erwartet tatsächlich nur einen Dateinamen. Früher ging hier nur GIF, heute alles was Tk für `PhotoImage` unterstützt, also mindestens GIF, vielleicht auch JPEG und in neuen Tk-Versionen auch PNG. Das Bildobjekt bekommt man dann aber nicht wieder raus, das muss man also noch mal separat laden wenn man an Pixelwerte heran kommen will.

Ich habe mir in meinem Programm ja einfach den `Canvas` geben lassen und da selbst ein Bild-Element drauf erstellt das ich mit PIL geladen habe.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Also ich habe das mit "bgpic()" gemacht da gibt es aber ein paar Probleme:
Die Steurung der Turtle verändert sich. Also bei "setheading()" schaut die Turtle jeweils in die Falsche Richtung. Also 0°=180° usw. Dazu kommt das man das der Turtle Shape unsichtbar wird. Also ich kann die Turtle nicht mehr sehen. "bgpic()" hat bei mir allerdings erst funktioniert als ich register_shape() benutzt habe.
Wie hast du denn dann bei deinem Programm blockagden eingeruichtet? Geht das da auch mit "getpixel()"? Und wie darf ich mir die "Canvas" vorstellen. Habe davon häufiger was gehört allerdings noch nie verwendet.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wie ich das gelöst habe kannst Du Dir doch anschauen. Den Quelltext habe ich in diesem Thema ja gezeigt. Zwar in Hy statt Python, aber es werden ja die selben Module verwendet und sooo viel anders ist der Code in Hy nun auch nicht strukturiert als man das in Python machen würde.

Wenn der Spieler in eine Wand läuft, dann stoppt mein Programm einfach. Eine Wand wird erkannt wenn das Pixel und der Spielerposition weiss ist oder der Spieler versucht das Bild zu verlassen. Wobei man sich noch Gedanken machen muss wie man eine Turtle-Position in Koordinaten für das Bild umrehnet, denn Turtle hat den Ursprung, also (0, 0), in der Mitte und somit auch negative Werte, während Pixel-Koordinaten positiv sind und links oben im Bild anfangen. Zudem ist die Y-Achse bei der Turtlegrafik entgegengesetzt zu der bei den Bilddaten. Also bei Turtle sind grössere Werte für die Y-Koordinate weiter oben, während bei den Bilddaten grössere Werte Pixel weiter unten beschreiben.

So sieht das Programm bei mir mit zwei quick'n'dirty erstellten Bildern aus:
Bild

`Canvas` ist eine `tkinter`-Klasse. Du hast die doch selbst schon verwendet — in Deinem ersten Beitrag hier im Thema.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Freddyyy
User
Beiträge: 69
Registriert: Donnerstag 26. April 2018, 17:50

Naja ich habe sieh nicht verwendet der Code wurde mir gemacht.
Antworten