352
Ereignisgesteuerte Programme
Kapitel
13
def fuellenumschalten(xdummy, ydummy):
if xdummy < -360: return
if stift.filling():
stift.end_fill()
stift.fillcolor("")
else:
stift.begin_fill()
stift.fillcolor(fuellanzeiger.fillcolor())
>
Führe diese Ergänzungen und Änderungen des Programmcodes durch
und teste das Programm
.
Du hast jetzt – mit gut 70 Zeilen Programmcode – schon ein ganz schönes
Anwendungsprogramm beisammen. Ich finde, es ist Zeit, dem Programm
einen Titel zu geben.
>
Füge in den Programmcode gleich nach der Erzeugung des
screen
-
Objekts folgende Programmzeile ein:
screen.title("SCRIBBLE - Das Malprogramm")
Natürlich kannst du dir auch einen eigenen Titel ausdenken, der dir besser
gefällt.
>
Speichere eine Kopie von
scribble_arbeit.py
als
scribble08.py
ab.
Viel mehr Farben
In ausgewachsenen Anwendungsprogrammen hat man nicht nur Werk-
zeugleisten zur Verfügung. Vielmehr können manche Eigenschaften mit
aufwendigen grafischen Dialogen eingestellt werden. Einen solchen wollen
wir jetzt in Betrieb nehmen. Dazu müssen wir aber ein wenig über den
Tellerrand des
turtle
-Moduls hinaus schauen.
Der grafische Werkzeugkasten Tkinter, der bei Python dabei ist und auf dem
auch das
turtle
-Modul aufbaut, enthält einige solche Dialoge. Darunter
einen zur Auswahl einer Farbe aus einer Menge von 16 Millionen Farben. Er
wird durch die Funktion
askcolor()
aus dem Untermodul
colorchooser
von
tkinter
aufgerufen.
353
Viel mehr Farben
>
Mach mit!
>>> from tkinter.colorchooser import askcolor
>>> askcolor()
Sieht unter Linux und auf dem Mac ganz anders aus!
Nun geht das Farbwahl-Dialogfenster auf. Du erkennst wohl gleich, dass
sich hier
tkinter
bei deinem Betriebssystem bedient. Sorge (mit der
Maus) dafür, dass im Feld F
ARBE
|B
ASIS
die gewünschte Farbe erscheint, und
klicke auf OK. Nun erhältst du als Rückgabewert der Funktion
askcolor()
Folgendes:
>>> askcolor()
((103.40234375, 224.875, 213.83203125), '#67e0d5')
Das sieht ziemlich sonderbar aus: ein Zweiertupel. Das erste Element ist
selbst ein Dreiertupel, das zweite ein String, der eine so genannte Hexade-
zimalzahl darstellt. Nicht leicht zu erklären.
>
Mach weiter mit!
>>> (0x67, 0xe0, 0xd5)
(103, 224, 213)
Hexadezimalzahlen werden mit 16 Ziffern aufgeschrieben: neben 0 ... 9
finden auch noch die »Ziffern« a b c d e f Verwendung. Sie stehen für die
Zahlen 10, 11, 12, 13, 14, 15. Für Python bedeutet 0xd5 die zweistellige
Hexadezimalzahl mit den Ziffern d und 5. Sie ergibt, in eine gewöhnliche
Dezimalzahl umgewandelt 213. Wenn du nun von
'#67e0d5'
jeweils zwei
Hexadezimalziffern in Dezimalzahlen umwandelst, erhältst du die ganzzah-
ligen Anteile des Dreiertupels, das von
askcolor()
ausgegeben wurde.
Neugierig?
http://de.wikipedia.org/wiki/Hexadezimalsystem
!
354
Ereignisgesteuerte Programme
Kapitel
13
Für uns genügt es, das zweite Element der Ausgabe von
askstring()
in
pencolor()
oder
fillcolor()
einzusetzen. Diese Methoden kennen
nämlich die von
colorchooser()
verwendete Hexadezimalschreibweise.
>
Führe
scribble_arbeit.py
aus und drücke auf die Taste
(9)
.
>
Mach weiter mit (
askcolor
sollte schon importiert sein)!
>>> farbe = askcolor()
>>> farbe
((103.40234375, 224.875, 213.83203125), '#67e0d5')
>>> farbe = farbe[1] # zweites Element
>>> farbe
'#67e0d5'
>>> stift.fillcolor(farbe)
Damit hast du die ausgewählte Farbe als Füllfarbe auf den Stift übertragen.
Das müssen wir nun noch ins Programm übertragen. Binden wir die Farb-
auswahl für Linien an
"l"
und die für Flächen (oder Füllen) an
"f"
. Dazu
brauchen wir eigentlich nichts Neues:
from turtle import Screen, Turtle
from tkinter.colorchooser import askcolor
import sys
sys.setrecursionlimit(20000)
def waehlelinienfarbe():
farbe = askcolor()
farbe = farbe[1]
stift.pencolor(farbe)
def waehlefuellfarbe():
farbe = askcolor()[1] # dasselbe diesmal kürzer
fuellanzeiger.fillcolor(farbe)
if stift.filling():
stift.fillcolor(farbe)
...
screen.onkeypress(stift.clear, "space")
screen.onkeypress(waehlelinienfarbe, "l")
screen.onkeypress(waehlefuellfarbe, "f")
screen.listen()

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.