7.1 Een knop maken
Hier bouw je op verder: 4.5 Een score bijhouden met global en Functies
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
Tot nu toe reageerde je spel op het toetsenbord en de muis. Met play.new_button maak je een echte knop: hij licht op als je eroverheen beweegt en reageert op een klik.
import play
teller = 0
tekst = play.new_text(words="0 keer geklikt", y=100)
knop = play.new_button(text="Klik mij")
@knop.when_clicked
def geklikt():
global teller
teller = teller + 1
tekst.words = str(teller) + " keer geklikt"
- Regel 3:
Het aantal kliks tot nu toe. Deze staat buiten de functie, want hij moet blijven bestaan tussen twee kliks door.
- Regel 5:
Maakt de knop. Het zweef-effect — de knop wordt lichter als je muis erop staat — krijg je er gratis bij.
- Regel 7:
Koppelt de functie eronder aan de knop. Bij elke klik roept play
geklikt()aan. - Regel 9:
Zonder
globalzoutellerop de volgende regel een nieuwe variabele binnen de functie worden, en begon het tellen elke klik opnieuw. - Regel 11:
Zet de nieuwe stand op het scherm.
str()maakt van het getal weer tekst.
De knop aanpassen
Een knop heeft veel instelbare eigenschappen. De belangrijkste:
knop = play.new_button(
text="Start",
x=0, y=0,
width=160, height=50,
color='royalblue',
text_color='white',
font_size=20,
)
coloris de kleur van de knop,hover_colorde kleur als je muis erop staattextkun je ook achteraf veranderen:knop.text = 'Opnieuw'border_radiusbepaalt hoe rond de hoeken zijn
Een knop uitzetten
Soms mag een knop tijdelijk niet klikbaar zijn, bijvoorbeeld zolang het spel bezig is. Zet dan disabled op True:
Een uitgezette knop wordt grijs en zijn when_clicked-functie wordt niet meer aangeroepen.
Opdracht 7.1.a: Kleurenknoppen
Maak een cirkel en twee knoppen: Rood en Blauw. Klik je op een knop, dan krijgt de cirkel die kleur.
Klik hier voor een tip.
Zet de cirkel bovenin (y=100) en de knoppen eronder, links en rechts van elkaar (x=-100 en x=100). Elke knop krijgt zijn eigen @knop.when_clicked-functie.
Klik hier voor de oplossing.
import play
cirkel = play.new_circle(color='black', y=100, radius=50)
rood = play.new_button(text="Rood", x=-100, y=-100, color='firebrick')
blauw = play.new_button(text="Blauw", x=100, y=-100)
@rood.when_clicked
def maak_rood():
cirkel.color = 'red'
@blauw.when_clicked
def maak_blauw():
cirkel.color = 'blue'
Opdracht 7.1.b: Maar één keer
Maak een knop Start die zichzelf uitzet zodra erop geklikt is, en een tekst die daarna "Gestart" laat zien.
Klik hier voor een tip.
Een knop kan zichzelf uitzetten: binnen zijn eigen klikfunctie mag je zijn disabled aanpassen.
Klik hier voor de oplossing.
import play
tekst = play.new_text(words="", y=100)
start = play.new_button(text="Start")
@start.when_clicked
def gestart():
start.disabled = True
tekst.words = "Gestart"
In de functie zet je start.disabled = True: de knop wordt grijs en reageert daarna nergens meer op.