image image


image

Worknote: Vom Ritt auf der Schildkröte

Nach meinem (nicht ganz freiwilligen) Abschied von TigerJython muß ich mich langsam an den Umstand gewöhnen, daß ich nun nicht mehr den wilden Tiger, sondern die mehr gemächliche Schildkröte reiten werde. Obwohl … so gemächlich ist Pythons Turtle eigentlich gar nicht. Zwar fehlt Ihr das mächtige Framework, das TigerJython mitbringt, dafür stehen dem Entwickler aber fast alle Bibliotheken, die Python bietet, zur Verfügung.

Und die eigentliche Behandlung der Turtle-Befehle ist der von TigerJython ziemlich ähnlich. Um dies zu vergleichen und um mir ein Framework zu schaffen, daß dem ähnlich ist, wie ich die Schildkröten-Skripte mit TigerJython genutzt hatte, habe ich dieses Progrämmchen (das ursprünglich sogar aus Pythons Turtlewelt stammt) in Python reimplementiert.

Mir kam es darauf an, explizit ein Turtlefenster zu definieren, in dem auch mehrere Schildkröten leben können. Dieses Fenster sollte eine festzulegende (aber feste) Größe und einen Titel besitzen. In Python sieht das so aus:

wn = t.Screen()
wn.colormode(255)
wn.bgcolor(54, 50, 80)                    # Hintergrundfarbe
wn.setup(width = WIDTH, height = HEIGHT)  # Fenstergröße
wn.title("Colorsys-Test")

Das sind aber schon die größten Unterschiede, wenn man das mit meiner TigerJython-Implementierung vergleicht:

Options.setPlaygroundSize(500, 500)  # Fenstergröße
win = TurtleFrame()
win.setTitle("Colorsys-Test")
win.clear(makeColor(54, 50, 80))     # Hintergrundfarbe

Neben den Namensänderungen (Screen() statt TurtleFrame() und bgcolor() statt clear()) und der Tatsache, daß TigerJython die Fenstergröße nur über den Umweg über Options.setPlaygroundSize() festlegen kann, ist vor allen Dingen zu beachten, daß Pythons Turtle per Default die RGB-Werte der Farben zwischen 0.0 und 1.0 erwartet, will man sie zwischen 0 und 255 angeben, muß man dies dem Skript mit colormode(255) explizit mitteilen. Zurück auf den Default setzt man dies mit colormode(1)1.

Der Rest ist nahezu identisch mit der TigerJython-Implementierung. Daher hier der komplette Quellcode, damit Ihr vergleichen könnt:

import turtle as t
import colorsys

WIDTH = 600
HEIGHT = 600

wn = t.Screen()
wn.colormode(255)
wn.bgcolor(54, 50, 80)                    # Hintergrundfarbe
wn.setup(width = WIDTH, height = HEIGHT)  # Fenstergröße
wn.title("Colorsys-Test")

wn.colormode(1)
alice = t.Turtle()
alice.speed(0)
alice.pensize(3)

h = 0.0      # hue

for i in range(300):
    c = colorsys.hsv_to_rgb(h, 1, 1)   # color
    alice.pencolor(c)
    h += 0.004
    alice.right(i)
    alice.circle(50, i)
    alice.forward(i)
    alice.left(91)

print("I did it, Babe")
wn.mainloop()

Das abschließende mainloop() scheint nicht notwendig zu sein, das Skript lief auch, wenn ich die letzte Zeile auskommentiert hatte. Aber das kann von der Entwcklungsmugebung und in welchem Kontext das Skript läuft abhängig sein, also habe ich das stehen lassen.

Was fehlt? Das größte Manko in meinen Augen ist, daß – bedingt durch die Beschränkung des zugrundeliegenden Tkinter – die Farben keinen Alpha-Kanal besitzen. Eine (Teil-) Transparenz ist also nicht möglich. Hier möchte ich noch testen, ob der Einsatz von Pillow hier unter Umständen Abhilfe schaffen kann.

Und ich habe mich ein wenig durch die Dokumentation gewühlt, das Turtle-Fenster scheint in ein Tkinter-Frame eingebettet werden zu können. Nicht nur dies möchte ich noch testen, sondern wenn ich das hinbekomme, müßte die Schildkröte ähnlich wie die Matplotlib eigentlich auch mit PySimpleGUI zusammenspielen. Still digging!

  1. Das herauszufinden, hat mich mindestens eine Viertelstunde gekostet, denn die Dokumentation verriet mir zwar, wie man den Colormode auf 255 setzt, aber nicht, wie er zurückzusetzen ist. 


(Kommentieren) 

image image



Über …

Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter Rentner, Autor, Netzaktivist und ehemaliger Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!

Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.

Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.

Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.


Werbung

Diese Spalte wurde absichtlich leergelassen!


Werbung


image  image  image
image  image  image


image