Practice Exercises for Keyboard#
1#
The program template contains a program designed to echo the message
"Pressed up arrow"
or
"Pressed down arrow"
whenever the
appropriate key is pressed. Debug the program template and fix the
program. Keyboard debugging
template
— Keyboard debugging
solution
— Keyboard debugging
(Checker)
# Key board debugging - debug and fix the code below
import simplegui
message = "Welcome!"
# Handler for keydown
def keydown(key):
global message
if key == "up": # <======= KEY_MAP must be used
message = "Up arrow"
elif key == "down": # <======= KEY_MAP must be used
message = "Down arrow"
# Handler to draw on canvas
def draw(canvas):
canvas.draw_text(message, [50,112], 48, "Red")
# Create a frame and assign callbacks to event handlers
frame = simplegui.create_frame("Home", 300, 200)
frame.set_draw_handler(draw)
# Start the frame animation
frame.start()
2#
Complete the program template below so that each press of the up
arrow increases the radius of the white ball centered in the middle
of the canvas by a small fixed amount and each press of the down
arrow key decreases the radius of the ball by the same amount. Your
added code should be placed in the keydown handler. (Note that
draw_circle
will throw an error if the
radius of the circle is decreased to zero or less.) Ball radius 1
template
— Ball radius 1
solution
— Ball radius 1
(Checker)
# Ball radius control - version 1
try:
import simplegui
except ModuleNotFoundError:
import simplequi as simplegui
WIDTH = 300
HEIGHT = 200
ball_radius = 50
BALL_RADIUS_INC = 3
# Handler for keydown
def keydown(key):
global ball_radius
if key == simplegui.KEY_MAP['up']:
ball_radius += BALL_RADIUS_INC
elif key == simplegui.KEY_MAP['down']:
ball_radius -= BALL_RADIUS_INC
# Handler to draw on canvas
def draw(canvas):
# note that CodeSkulptor throws an error if radius is not positive
canvas.draw_circle([WIDTH / 2, HEIGHT / 2], ball_radius, 1, "White", "White")
# Create a frame and assign callbacks to event handlers
frame = simplegui.create_frame("Home", 300, 200)
frame.set_keydown_handler(keydown)
frame.set_draw_handler(draw)
# Start the frame animation
frame.start()
3#
Complete the program template so that the program displays
"Space bar down"
on the canvas while the
space bar is held down and "Space bar up"
while the space bar is up. You will need to add code to both the
keydown and keyup handlers. Space bar
template
— Space bar
solution
— Space bar
(Checker)
4#
Challenge: Complete the program template below so that holding down the up arrow key increases the radius of the white ball centered in the middle of the canvas by a small fixed amount each frame. Releasing the up arrow key causes that growth to cease. You will need to add code to the keydown and keyup handlers as well as the draw handler. Ball radius 2 template — Ball radius 2 solution — Ball radius 2 (Checker)