Ga naar hoofdinhoud

7.2 Schuiven en aanvinken

Hier bouw je op verder: Parameters

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Een knop kent maar twee toestanden: geklikt of niet. Voor instellingen met een waarde zijn er twee andere elementen: de schuifbalk en het vinkje.

De schuifbalk​

play.new_slider maakt een schuifbalk tussen een minimum en een maximum. Met @schuif.when_changed reageer je op elke verandering; de functie krijgt de nieuwe waarde mee als parameter.

Spel laden...
import play

cirkel = play.new_circle(color='seagreen', y=80)
schuif = play.new_slider(min_value=10, max_value=100, value=50, y=-120)

@schuif.when_changed
def grootte_veranderd(waarde):
cirkel.radius = int(waarde)
  1. Regel 4:

    De schuifbalk loopt van 10 tot 100 en begint op 50. Die 50 is dus ook meteen de startgrootte van de cirkel.

  2. Regel 6:

    Koppelt de functie eronder aan de schuif. Elke verandering roept hem opnieuw aan.

  3. Regel 7:

    waarde is de nieuwe stand van de schuif. Een when_changed-functie krijgt die als parameter mee; je hoeft hem niet zelf op te halen.

  4. Regel 8:

    int() maakt er een heel getal van, want de schuif geeft een kommagetal terug.

Sleep aan de schuif en de cirkel groeit en krimpt mee. Je kunt de waarde ook altijd direct uitlezen met schuif.value.

Tip: met show_value=True toont de schuifbalk zijn eigen waarde, en met step=5 verspringt hij in stappen van 5.

Het vinkje​

play.new_checkbox maakt een aanvinkvakje met een label. De when_changed-functie krijgt True of False mee.

Spel laden...

Uitlezen kan ook hier direct: vinkje.checked is True of False.

Opdracht 7.2.a: Snelheidsregelaar​

Maak een cirkel die naar rechts beweegt en aan de linkerkant weer opnieuw begint. Zet er een schuifbalk onder (van 0 tot 10) die de snelheid bepaalt.

Klik hier voor een tip.

Gebruik @play.repeat_forever voor de beweging en lees daarbinnen schuif.value uit. Is de cirkel voorbij x = 300, zet hem dan terug op x = -300.

Klik hier voor de oplossing.
import play

cirkel = play.new_circle(color='purple', radius=20, y=60)
schuif = play.new_slider(min_value=0, max_value=10, value=3, y=-120, show_value=True)

@play.repeat_forever
def beweeg():
cirkel.x = cirkel.x + schuif.value
if cirkel.x > 300:
cirkel.x = -300
Spel laden...

Hier is geen when_changed nodig: de beweging leest de waarde elk frame zelf uit. Staat de schuif op 0, dan staat de cirkel stil.