K103: Zeichnen mit Farben

In diesem Blog lernst Du, die Farbe des Strichs, die Farbe einer Figur und die Farbe des Hintergrunds zu ändern. Damit wird es endlich bunt!

Inhaltsverzeichnis

Dieser Blog wird vom IAIP gratis zur Verfügung gestellt. Der Blog ist ein  Bestandteil des Kurses K103 «Programmieren mit Turtle Graphics» und gehört zur Lektion 3, Themenblock 2 (L3T2).

Der Kurs führt dich durch die einzelnen Blogs, enthält Zusatzmaterialien, Videos, viele Aufgaben mit Lösungen und Quizze zur Lernkontrolle. Der Kurs hat eine Kursgebühr von CHF 50.- Mit dem Einschreiben zum Kurs hilfst du mit, dass solche Blogs auch zukünftig noch gratis zur Verfügung gestellt werden können.

Einordnung

Im letzten Themenblock haben wir festgelegt, ob ein Strich gezeichnet wird oder nicht. Ebenso haben wir die Strichdicke definiert. In diesem Themenblock lernen wir nun, die Farbe des Strichs, die Farbe einer Figur und die Farbe des Hintergrunds zu ändern. Damit wird es endlich bunt!

Stiftfarben festlegen mit pencolor()

Die Anweisung pencolor(farbe(von engl. «pen»: «Stift» & engl. «color»: «Farbe») legt die Farbe fest, mit welcher unserer Schildkröte zeichnet. Sobald sich der Cursor bewegt, und der Stift sich unten befindet, entsteht eine Linie in der angegebenen Farbe. Die Anweisung hat die folgende Syntax:

turtle.pencolor(*args)

Beginnen wir als erstes mit einem kleinen Beispielprogramm:

from turtle import *

# Quadrat zeichnen
pencolor("green")
forward(100)
right(90)
pencolor("red")
forward(100)
right(90)
pencolor("blue")
forward(100)
right(90)
pencolor("yellow")
forward(100)
right(90)

# und hier fehlt der Abschluss
done()

Das Programm führt zu folgender Ausgabe:

Wie aus der Ausgabe ersichtlich, kann man mit pencolor(farbe) einfach die Farbe einstellen. Dabei gibt es gleich mehrere Möglichkeiten, wie dies funktioniert. D.h. der Wert, welchen wir übergeben (der Parameter, das Attribut), kann man auf verschiedene Arten angeben. Dies sind:

  1. pencolor(colorstring): Hier wird die Farbe über einen Namen definiert, z.B. den Namen «green» für eine grüne Farbe. Genau so, wie wir es im Beispielprogramm gemacht haben.
  2. pencolor(r, g, b): Hier wird die Farbe über drei Zahlen zwischen 0 und 255 definiert. Die Zahlen legen das Mischverhältnis aus roter, grüner und blauer Farbe fest.
    Beispielsweise so: pencolor(100, 150, 200)

Wir werden diese 2 Formen im Nachfolgenden besprechen. An dieser Stelle sei erwähnt, dass es noch zwei Sonderformen gibt, welche im Rahmen dieses Einführungskurses aber keine wichtige Rolle spielen:

  1. Als colorstring (siehe 1) kann man nicht nur einen Farbnamen, sondern auch drei aneinandergereihte Hexadezimalzahl zwischen 00 und ff angeben. Vorab wird eine Raute Zeichen gestellt.
    Beispielsweise so: pencolor(«#33cc8c»).
  2. Anstelle von 3 einzelnen Farbwerten (siehe 2) kann man auch ein sogenanntes Tupel aus 3 Werten übergeben. Tupel werden in Python in Klammern () gesetzt.
    Anstelle von pencolor(255,255,255) schreiben wir somit pencolor((255, 255, 255)).

Für die jüngeren Kursteilnehmer reicht es völlig aus, die Farbe wie im oberen Beispiel mit einem Namen anzugeben!

Definition der Farbe über den Farbnamen

Die erste Möglichkeit eine Farbe zu definieren ist die Angabe eines passenden Farbnamens. In Python (bzw. in TK oder Turtle Graphics) sprechen wir von einem sogenannten colorstring.

turtle.pencolor(«green»)

Eine kleine Anmerkung zum Thema colorstring:
Ein string ist in Python, wie übrigens auch in den meisten anderen Programmiersprachen, eine Zeichenkette. Klingt kompliziert, aber gemeint ist damit nur eine Reihe aneinandergereihter Zeichen bzw. Buchstaben. Beispielsweise so: «text», «Wort», «ganze Sätze», «dgegh», «!». Reiht man die einzelnen Zeichen (Buchstaben) in der richtigen Reihenfolge aneinander, so ensteht ein Wort. Aus den 4 Zeichen «H» + «a» + «u» + «s» entsteht so das Wort Haus.

Für uns wichtig hier sind 3 Punkte:

Was gibt es nun für Farbnamen? Eine Auswahl der wichtigsten Farbnamen findest du nachfolgend:

Farbnamen

Darüber hinaus gibt es aber eine Vielzahl weiterer Farben. 

COLORS = [’snow›, ‹ghost white›, ‹white smoke›, ‹gainsboro›, ‹floral white›, ‹old lace›, ‹linen›, ‹antique white›, ‹papaya whip›, ‹blanched almond›, ‹bisque›, ‹peach puff›, ’navajo white›, ‹lemon chiffon›, ‹mint cream›, ‹azure›, ‹alice blue›, ‹lavender›, ‹lavender blush›, ‹misty rose›, ‹dark slate gray›, ‹dim gray›, ’slate gray›, ‹light slate gray›, ‹gray›, ‹light grey›, ‹midnight blue›, ’navy›, ‹cornflower blue›, ‹dark slate blue›, ’slate blue›, ‹medium slate blue›, ‹light slate blue›, ‹medium blue›, ‹royal blue›, ‹blue›, ‹dodger blue›, ‹deep sky blue›, ’sky blue›, ‹light sky blue›, ’steel blue›, ‹light steel blue›, ‹light blue›, ‹powder blue›, ‹pale turquoise›, ‹dark turquoise›, ‹medium turquoise›, ‹turquoise›, ‹cyan›, ‹light cyan›, ‹cadet blue›, ‹medium aquamarine›, ‹aquamarine›, ‹dark green›, ‹dark olive green›, ‹dark sea green›, ’sea green›, ‹medium sea green›, ‹light sea green›, ‹pale green›, ’spring green›, ‹lawn green›, ‹medium spring green›, ‹green yellow›, ‹lime green›, ‹yellow green›, ‹forest green›, ‹olive drab›, ‹dark khaki›, ‹khaki›, ‹pale goldenrod›, ‹light goldenrod yellow›, ‹light yellow›, ‹yellow›, ‹gold›, ‹light goldenrod›, ‹goldenrod›, ‹dark goldenrod›, ‹rosy brown›, ‹indian red›, ’saddle brown›, ’sandy brown›, ‹dark salmon›, ’salmon›, ‹light salmon›, ‹orange›, ‹dark orange›, ‹coral›, ‹light coral›, ‹tomato›, ‹orange red›, ‹red›, ‹hot pink›, ‹deep pink›, ‹pink›, ‹light pink›, ‹pale violet red›, ‹maroon›, ‹medium violet red›, ‹violet red›, ‹medium orchid›, ‹dark orchid›, ‹dark violet›, ‹blue violet›, ‹purple›, ‹medium purple›, ‹thistle›, ’snow2′, ’snow3′, ’snow4′, ’seashell2′, ’seashell3′, ’seashell4′, ‹AntiqueWhite1›, ‹AntiqueWhite2›, ‹AntiqueWhite3›, ‹AntiqueWhite4›, ‹bisque2›, ‹bisque3›, ‹bisque4›, ‹PeachPuff2›, ‹PeachPuff3›, ‹PeachPuff4›, ‹NavajoWhite2›, ‹NavajoWhite3›, ‹NavajoWhite4›, ‹LemonChiffon2›, ‹LemonChiffon3›, ‹LemonChiffon4›, ‹cornsilk2›, ‹cornsilk3›, ‹cornsilk4›, ‹ivory2›, ‹ivory3›, ‹ivory4›, ‹honeydew2›, ‹honeydew3›, ‹honeydew4›, ‹LavenderBlush2›, ‹LavenderBlush3›, ‹LavenderBlush4›, ‹MistyRose2›, ‹MistyRose3›, ‹MistyRose4›, ‹azure2›, ‹azure3›, ‹azure4›, ‹SlateBlue1›, ‹SlateBlue2›, ‹SlateBlue3›, ‹SlateBlue4›, ‹RoyalBlue1›, ‹RoyalBlue2›, ‹RoyalBlue3›, ‹RoyalBlue4›, ‹blue2›, ‹blue4›, ‹DodgerBlue2›, ‹DodgerBlue3›, ‹DodgerBlue4›, ‹SteelBlue1›, ‹SteelBlue2›, ‹SteelBlue3›, ‹SteelBlue4›, ‹DeepSkyBlue2›, ‹DeepSkyBlue3›, ‹DeepSkyBlue4›, ‹SkyBlue1›, ‹SkyBlue2›, ‹SkyBlue3›, ‹SkyBlue4›, ‹LightSkyBlue1›, ‹LightSkyBlue2›, ‹LightSkyBlue3›, ‹LightSkyBlue4›, ‹SlateGray1›, ‹SlateGray2›, ‹SlateGray3›, ‹SlateGray4›, ‹LightSteelBlue1›, ‹LightSteelBlue2›, ‹LightSteelBlue3›, ‹LightSteelBlue4›, ‹LightBlue1›, ‹LightBlue2›, ‹LightBlue3›, ‹LightBlue4›, ‹LightCyan2›, ‹LightCyan3›, ‹LightCyan4›, ‹PaleTurquoise1›, ‹PaleTurquoise2›, ‹PaleTurquoise3›, ‹PaleTurquoise4›, ‹CadetBlue1›, ‹CadetBlue2›, ‹CadetBlue3›, ‹CadetBlue4›, ‹turquoise1›, ‹turquoise2›, ‹turquoise3›, ‹turquoise4›, ‹cyan2›, ‹cyan3›, ‹cyan4›, ‹DarkSlateGray1›, ‹DarkSlateGray2›, ‹DarkSlateGray3›, ‹DarkSlateGray4›, ‹aquamarine2›, ‹aquamarine4›, ‹DarkSeaGreen1›, ‹DarkSeaGreen2›, ‹DarkSeaGreen3›, ‹DarkSeaGreen4›, ‹SeaGreen1›, ‹SeaGreen2›, ‹SeaGreen3›, ‹PaleGreen1›, ‹PaleGreen2›, ‹PaleGreen3›, ‹PaleGreen4›, ‹SpringGreen2›, ‹SpringGreen3›, ‹SpringGreen4›, ‹green2›, ‹green3›, ‹green4›, ‹chartreuse2›, ‹chartreuse3›, ‹chartreuse4›, ‹OliveDrab1›, ‹OliveDrab2›, ‹OliveDrab4›, ‹DarkOliveGreen1›, ‹DarkOliveGreen2›, ‹DarkOliveGreen3›, ‹DarkOliveGreen4›, ‹khaki1›, ‹khaki2›, ‹khaki3›, ‹khaki4›, ‹LightGoldenrod1›, ‹LightGoldenrod2›, ‹LightGoldenrod3›, ‹LightGoldenrod4›, ‹LightYellow2›, ‹LightYellow3›, ‹LightYellow4›, ‹yellow2›, ‹yellow3›, ‹yellow4›, ‹gold2›, ‹gold3›, ‹gold4›, ‹goldenrod1›, ‹goldenrod2›, ‹goldenrod3›, ‹goldenrod4›, ‹DarkGoldenrod1›, ‹DarkGoldenrod2›, ‹DarkGoldenrod3›, ‹DarkGoldenrod4›, ‹RosyBrown1›, ‹RosyBrown2›, ‹RosyBrown3›, ‹RosyBrown4›, ‹IndianRed1›, ‹IndianRed2›, ‹IndianRed3›, ‹IndianRed4′, ’sienna1′, ’sienna2′, ’sienna3′, ’sienna4›, ‹burlywood1›, ‹burlywood2›, ‹burlywood3›, ‹burlywood4›, ‹wheat1›, ‹wheat2›, ‹wheat3›, ‹wheat4›, ‹tan1›, ‹tan2›, ‹tan4›, ‹chocolate1›, ‹chocolate2›, ‹chocolate3›, ‹firebrick1›, ‹firebrick2›, ‹firebrick3›, ‹firebrick4›, ‹brown1›, ‹brown2›, ‹brown3›, ‹brown4′, ’salmon1′, ’salmon2′, ’salmon3′, ’salmon4›, ‹LightSalmon2›, ‹LightSalmon3›, ‹LightSalmon4›, ‹orange2›, ‹orange3›, ‹orange4›, ‹DarkOrange1›, ‹DarkOrange2›, ‹DarkOrange3›, ‹DarkOrange4›, ‹coral1›, ‹coral2›, ‹coral3›, ‹coral4›, ‹tomato2›, ‹tomato3›, ‹tomato4›, ‹OrangeRed2›, ‹OrangeRed3›, ‹OrangeRed4›, ‹red2›, ‹red3›, ‹red4›, ‹DeepPink2›, ‹DeepPink3›, ‹DeepPink4›, ‹HotPink1›, ‹HotPink2›, ‹HotPink3›, ‹HotPink4›, ‹pink1›, ‹pink2›, ‹pink3›, ‹pink4›, ‹LightPink1›, ‹LightPink2›, ‹LightPink3›, ‹LightPink4›, ‹PaleVioletRed1›, ‹PaleVioletRed2›, ‹PaleVioletRed3›, ‹PaleVioletRed4›, ‹maroon1›, ‹maroon2›, ‹maroon3›, ‹maroon4›, ‹VioletRed1›, ‹VioletRed2›, ‹VioletRed3›, ‹VioletRed4›, ‹magenta2›, ‹magenta3›, ‹magenta4›, ‹orchid1›, ‹orchid2›, ‹orchid3›, ‹orchid4›, ‹plum1›, ‹plum2›, ‹plum3›, ‹plum4›, ‹MediumOrchid1›, ‹MediumOrchid2›, ‹MediumOrchid3›, ‹MediumOrchid4›, ‹DarkOrchid1›, ‹DarkOrchid2›, ‹DarkOrchid3›, ‹DarkOrchid4›, ‹purple1›, ‹purple2›, ‹purple3›, ‹purple4›, ‹MediumPurple1›, ‹MediumPurple2›, ‹MediumPurple3›, ‹MediumPurple4›, ‹thistle1›, ‹thistle2›, ‹thistle3›, ‹thistle4›, ‹gray1›, ‹gray2›, ‹gray3›, ‹gray4›, ‹gray5›, ‹gray6›, ‹gray7›, ‹gray8›, ‹gray9›, ‹gray10›, ‹gray11›, ‹gray12›, ‹gray13›, ‹gray14›, ‹gray15›, ‹gray16›, ‹gray17›, ‹gray18›, ‹gray19›, ‹gray20›, ‹gray21›, ‹gray22›, ‹gray23›, ‹gray24›, ‹gray25›, ‹gray26›, ‹gray27›, ‹gray28›, ‹gray29›, ‹gray30›, ‹gray31›, ‹gray32›, ‹gray33›, ‹gray34›, ‹gray35›, ‹gray36›, ‹gray37›, ‹gray38›, ‹gray39›, ‹gray40›, ‹gray42›, ‹gray43›, ‹gray44›, ‹gray45›, ‹gray46›, ‹gray47›, ‹gray48›, ‹gray49›, ‹gray50›, ‹gray51›, ‹gray52›, ‹gray53›, ‹gray54›, ‹gray55›, ‹gray56›, ‹gray57›, ‹gray58›, ‹gray59›, ‹gray60›, ‹gray61›, ‹gray62›, ‹gray63›, ‹gray64›, ‹gray65›, ‹gray66›, ‹gray67›, ‹gray68›, ‹gray69›, ‹gray70›, ‹gray71›, ‹gray72›, ‹gray73›, ‹gray74›, ‹gray75›, ‹gray76›, ‹gray77›, ‹gray78›, ‹gray79›, ‹gray80›, ‹gray81›, ‹gray82›, ‹gray83›, ‹gray84›, ‹gray85›, ‹gray86›, ‹gray87›, ‹gray88›, ‹gray89›, ‹gray90›, ‹gray91›, ‹gray92›, ‹gray93›, ‹gray94›, ‹gray95›, ‹gray97›, ‹gray98›, ‹gray99›]

RGB Farbangaben

Die zweite Möglichkeit eine Farbe zu definieren ist die Angabe von drei Zahlenwerten.

turtle.pencolor(«green»)

Die Farbe wird über drei Zahlenwerte zwischen 0 und 255 definiert. Die Zahlen legen das Mischverhältnis aus roter, grüner und blauer Farbe fest. Die Anweisung turtle.pencolor (0, 100 , 255) mischt eine Farbe aus 0 Teilen roter Farbe, 100 Teilen grüner Farbe und 255 Teilen blauer Farbe.

Wir hätten also unser Beispielprogramm auch so schreiben können:

from turtle import *

# Quadrat zeichnen
colormode(255)
pencolor(0, 255, 0)     # anstelle pencolor("green")
forward(100)
right(90)
pencolor(255, 0, 0)     # anstelle pencolor("red")
forward(100)
right(90)
pencolor(0, 0, 255)     # anstelle pencolor("blue")
forward(100)
right(90)
pencolor(255, 255, 0)   # anstelle pencolor("yellow")
forward(100)
right(90)

# und hier fehlt der Abschluss
exitonclick()

Zu beachten ist neben den Farbangaben in Zeilen 5, 8, 11 und 14 insbesondere auch die Zeile 4.

turtle.colormode(255)

Diese Anweisung ist hier zwingend notwendig. Sie sagt dem Computer, dass unsere Farbangaben Zahlen zwischen 0 und 255 sind.

Additive Farbmischung

Wie kann man Farben mischen? Hierzu gibt es (je nach Technologie) unterschiedliche Methoden. Bei unseren Computern mit ihren Monitoren verwendet man das Prinzip der additiven Farbmischung. Das Prinzip besagt im Wesentlichen, dass ich jede beliebige Farbe herstellen kann, wenn ich die drei Grundfarben Rot, Grün und Blau im richtigen Verhältnis mische. Man spricht deshalb auch vom RGB Modell (rot, grün, blau)

RGB

Das bedeutet, der Computer kann erst einmal nur die 3 Grundfarben Rot, Grün und Blau darstellen. Er kann aber mehr oder weniger von jeder Farbe zeigen und diese 3 Farben auch «mischen». Mischt man Rot + Grün, so bekommt man Gelb, Grün + Blau ergibt Cyan, etc. Mit den drei Grundfarben Rot, Grün und Blau lassen sich so ziemlich alle Farben (sogenannten Lichtfarben) darstellen.

Für uns stellt sich die Frage, wie man die Mengen bzw. Verhältniszahlen dem Computer genau angegeben soll. Also wie man beispielsweise genau sagen kann, man sollte doppelt so viel Rot wie Blau und halb so viel wie Grün etc. nehmen. Das funktioniert bei den meisten Systemen so, dass man den Rotanteil, den Grünanteil und den Blauanteil durch eine Zahl beschreibt, und zwar durch eine Ganzzahl zwischen 0 und 255. Mit diesen drei Zahlen kann man insgesamt 256*256*256 = 16.78 Millionen verschiedene Farben mischen, was in den meisten Fällen mehr als genug ist.

RGB mit Intensität

Unsere oben erwähnten wichtigsten Farben lassen sich aus folgenden Werten herstellen:

Man muss sich diese Zahlen nicht merken. Wichtig ist Folgendes:

Neben dem RGB-Farbmodell existiert wie erwähnt auch noch andere Modelle. In der IT bekannt ist insbesondere das CMYK-Farbmodell, welches unter anderem von Druckern verwendet wird (da hier anders Farben gemischt werden). Die CMYK-Farben werden aus den Farben Cyan (Blau), Magenta (Rot), Yellow (Gelb) und Key (Schwarzanteil) gemischt.

Anbei noch einige ergänzende Hinweise für Fortgeschrittene:

Zur Orientierung nutz man manchmal Farbwürfel. Die drei Zahlen spannen einen dreidimensionalen Farbraum bzw. eben einen Würfel auf. In einem solchen Farbraum kann man theoretisch jede beliebige für uns sichtbare Lichtfarbe herstellen. Das funktioniert natürlich nur, wenn man auch jede Zahl, also nicht nur die Ganzzahlen zwischen 0 und 255, verwenden kann.

Innerhalb dieses RGB Farbmodells liegen verschieden grosse und unterschiedlich positionierte Unter-Farbräume, welche jeweils auch als Arbeitsfarbraum bezeichnet werden. Die bekanntesten sind sRGB und AdobeRGB. So ein Arbeitsfarbraum wird dann in einem Bildbearbeitungsprogramm (z.B. Adobe Photoshop) verwendet. Während das RGB-Farbmodell alle theoretisch sichtbaren Farben beinhaltet, enthalten Arbeitsfarbräume nur die Farben, welche mit dem jeweiligen Medium bzw. Gerät dargestellt werden können.

Ein grosser Nachteil des RGB Modells liegt darin, dass es nicht intuitiv ist. Wir können eine Farbe nicht oder nur sehr schlecht aus ihren Anteilen an den Primärfarben Rot, Grün und Blau vorhersagen. Es ist beispielsweise schwierig zu erraten, welche Farbe aus pencolor(233,240,219) entsteht!

Es ist sehr leicht die Grundfarbe Grün (0, 255, 0) durch eine Reduktion des Grünanteils auf z.B. (0, 99, 0) abzudunkeln. Für ein helles und weniger leuchtendes grün benötigt man aber alle drei Farben. Und ein abdunkeln einer solchen Mischfarbe geht mitunter mit überproportionalen Verschiebungen einher. Im nachfolgenden Beispiel haben wir ausgehend von pencolor(233, 240, 219) nicht bloss den Grünanteil, sondern alle 3 Komponenten (r: -44, g: – 31, b: -73) unterschiedlich und in unterschiedlichen Verhältnissen (r: -18.9%, g: -12.9%, b: -33,3%) reduziert.

Grundfarbe Grün: pencolor(0, 255, 0)

Dunkles Grün: pencolor(0, 99, 0)

Helles Grün: pencolor(233, 240, 219)

Dunkleres Grün: pencolor(189, 209, 148)

RGB Farben erscheinen uns ungeordnet und chaotisch.

Exkurs: tkinter Farbwerte

Du hast dich vielleicht gefragt, weshalb wir in unserem Programm zuerst die Anweisung colormode(255) geben mussten.

Turtle Graphics basiert auf tkinter, einem Erweiterungsmodul für Python. Dort werden Farbwerte bzw. die Intensität der Farbkomponenten Rot, Grün und Blau standardmässig auf einer Skala zwischen 0.0 (Minimum) und 1.0 (Maximum) anstelle von 0 bis 255 angegeben.

Turtle Graphics bietet aber glücklicherweise 2 Farbmodi an, welche man durch die Anweisung colormode(maximalwert) umstellen kann. Der Maximalwert der Farbskala kann mit colormode(1) oder mit colormode(255) auf 1 beziehungsweise auf 255 festgelegt werden.

Hierzu ein kleines Beispielprogramm:

from turtle import *

colormode(255)
pencolor(0,255,128)
forward(50)

colormode(1)
pencolor(0,1, 0.5)
forward(50)

done()

Beim Start befindet sich Turtle Graphics im colormode(1), weshalb wir im Programm zuerst den Modus auf 255 umgestellt haben.

Nachfolgende die Tabelle mit den wichtigsten Farben mit Farbnamen und zugehörigen 3 RGB Farbwerten, ergänzt um die Skala 0-1:

RGB Farben

Exkurs: HEX Farbangaben

In vielen Programmen findet man auch Farbangaben im Hexadezimal-format. Bei einer solchen Hex-Farbangaben wird die Intensität einer Farbkomponente nicht durch ein Dezimalzahl zwischen 0 und 255 bzw zwischen 0.0 und 1.0, sondern durch ein ganzzahlige Hexadezimalzahl zwischen 00 (Minimum) und ff (Maximum) angegeben.

In Python kann man Ganzzahlen in Hexadezimalschreibweise oder Dezimalschreibweise angeben. Bei der Hexadezimalnotation stellt man einfach die Kennung 0x voran. Die Zahl 0 entspricht 0x0, 10 entspricht 0xa, 127 entspricht 0x77 und 255 entspricht 0xff.

from turtle import *

colormode(255)
pencolor(255,115,155)
forward(50)
pu()
fd(10)
pd()

pencolor(0xff,0x77,0x77)
forward(50)
pu()
fd(10)
pd()

pencolor("#ff7777")
forward(50)

done()

Das Programm führt zu folgender Ausgabe:

Hexadezimalangaben

Wie im Programm ersichtlich, können wir nun die drei Hexadezimalzahlen aneinanderreihen und mit einem vorgestellten Rautezeichen als colorstring übergeben.

Füllfarben für Figuren

Wir können in Turtle Graphics nicht nur die Stiftfarbe verändern, sondern auch ganze Figuren ausmalen lassen.

Hierzu verwendet man die zwei Anweisungen begin_fill() (von engl. «begin»: «anfangen» & engl. «fill»: «füllen») und end_fill() (von engl. «end»: «beenden» & engl. «fill»: füllen). Erstere führt man aus, bevor man mit den Anweisungen beginnt, welche die auszufüllende Figur zeichnen sollen, letztere danach, also sobald man die Figur gezeichnet hat.

Die zwei Anweisungen haben die folgende Syntax:

turtle.begin_fill()
turtle.end_fill()

Zusätzlich kann man noch die Füllfarbe wählen. Die entsprechende Anweisung zum setzten der Füllfarbe lautet fillcolor():

turtle.fillcolor(*args)

Für den zu übergebenden Farbwert gilt das bereits gesagte. Wir können insbesondere einen Farbnamen (ein colorstring) wie beispielsweise fillcolor(«green»), oder aber drei Zahlenwerte zur den RGB Farbwerten zwischen 0 und 255 (bei colormode(255): fillcolor(0, 255, 0)) oder alternativ zwischen 0 und 1 colormode(1): fillcolor(0, 1, 0) ) angeben. Und natürlich funktionieren auch die erwähnten Sonderlösungen, wie die Angabe eines Hexadezimal colorstrings oder die Angabe eines Tupels.

Hierzu ein kleines Beispiel:

from turtle import *

# äusseren Kreis zeichnen
pensize(4)
pencolor("red")
circle(70)

# inneren Kreis zeichnen
pensize(10)
pencolor("blue")
fillcolor("grey")
begin_fill()
circle(50)
end_fill()

# und Abschluss
done()

Der Code führt zu folgender Ausgabe:

Zwei Kreise

Hintergrundfarben

Als letztes wollen wir hier noch die Möglichkeit anschauen, das Fenster (den Malbereich der Schildkröte) in einer gewissen Farbe darzustellen. Hierzu verwendet man den Befehl bgcolor() (von englisch background: Hintergrund & engl. color: Farbe). Die Syntax ist wie folgt:

turtle.bgcolor(*args)

Der Parameter args steht wiederum für einen Farbnamen oder eine RGB Farbangabe (als 3 Zahlen zwischen 0 und colormode, ein Tuple mit diesen 3 Zahlen oder eine Hex-Farbangabe)

Im folgenden Beispiel haben wir als Hintergrundfarbe ein dunkles Grau gewählt:

from turtle import *

# Quadrat zeichnen
bgcolor("darkgrey")
pencolor("white")
pensize(5)
circle(100)

# und hier fehlt der Abschluss
done()
Hintergrundfarbe

Übungsaufgaben

Nachfolgend findest Du ein paar Übungsaufgaben. 

Lösungen zu den Aufgaben findest du im Kurs K103 «Programmieren mit Turtle Graphics «: 
Lektion 3, Themenblock 2 (L3T2).

Aufgabe 1: eine grünes Quadrat

Versuche das rechts abgebildete Quadrat nachzuzeichnen. Das Quadrat hat eine Seitenlänge von je 120 Punken, eine Liniendicke von 10 Punkten und eine grüne Linienfarbe.

Quadrat grün

Aufgabe 2: blaues Dreieck mit roten, runden Ecken

Versuche das rechts abgebildete gleichseitige Dreieck nachzuzeichnen. Du kannst Seitenlängen, Länge der Lücken und Radius der Ecken selber wählen.

Aufgabe 3: vier bunte Quadrate

Versuche die rechts abgebildete Figur nachzuzeichnen.
erstes Quadrat: Strichdicke 8, Stiftfarbe „red“, Füllfarbe „orange“
zweites Quadrat: Strichdicke 6, Stiftfarbe „dark green“, Füllfarbe „green“
drittes Quadrat: Strichdicke 4, Stiftfarbe „blue“, Füllfarbe „cyan“
viertes Quadrat: Strichdicke 2, Stiftfarbe „purple“, Füllfarbe „yellow“

bunte Vierecke

Aufgabe 4: Yin & Yang Teil III

Versuche das rechts abgebildete Yin & Yang Zeichen zu erstellen. Die Farbnamen für schwarz und weiss sind «black» und «white».

Aufgabe 5: gefüllte Kreise

Erinnerst du dich an unsere 4 überlappenden Kreise aus dem vorangehenden Themenblock (Aufgabe Audi Logo). Zeichne nun erneut 4 solche Kreise, wobei jeder Kreis mit einer anderen Farbe ausgefüllt werden soll.

Aufgabe 6: drei Kreise

Versuche die rechts abgebildeten Kreise auf schwarzem Hintergrund in folgender Reihenfolge zu zeichnen.

erster Kreis: Farbe „red“, Dicke 4, Durchmesser 140, keine Füllung.
zweiter Kreis: Farbe „blue“, Dicke 10, Durchmesser 100, Füllung „grey“.
dritter Kreis: Farbe „yellow“, Dicke 5, Durchmesser 100, keine Füllung.

Aufgabe 7: Kreativaufgabe I: lachendes Gesicht

Versuche ein ein lachendes Gesicht zu zeichnen. Du kannst dabei für Mund, Nase und Augen jeweils die Strichdicke verändern und andere Farben nehmen.

Aufgabe 8: Kreativaufgabe II: Haus mit Fenster

Zeichne ein dein Haus mit Fenster nun bunt.