Touchscreen Drawing
In this short tutorial, you’ll learn how to use the touchscreen to interact with your program.
We’ll make a simple drawing app:
- Drag your finger to draw lines
- Press [EXE] to clear
- Press [CLEAR] to exit
How it works
Section titled “How it works”ClassPad touch input is handled through the event system, just like keys.
You can listen to:
KEYEV_TOUCH_DOWN
: when your finger touches the screenKEYEV_TOUCH_DRAG
: while you’re draggingKEYEV_TOUCH_UP
: when you lift your finger
Each event has .x
and .y
fields for the position (in pixels).
Step 1: Start with a blank screen
Section titled “Step 1: Start with a blank screen”We create a function clear()
that:
- Clears the screen
- Draws a helpful label at the top
def clear(): dclear(C_WHITE) dtext(2, 2, C_BLACK, "Touch: draw | EXE: clear | Clear: quit")
We then call it once at the beginning:
clear()dupdate()
Step 2: Track Touch Position
Section titled “Step 2: Track Touch Position”We use two variables to remember the last touch location:
x, y = -1, -1
Every time the screen is touched, we save where it started.
Step 3: Event Loop
Section titled “Step 3: Event Loop”We use pollevent()
to listen to input:
ev = pollevent()while ev.type != KEYEV_NONE: # Handle events... ev = pollevent()
This loop catches every type of input — key presses and touches.
Step 4: Drawing with your finger
Section titled “Step 4: Drawing with your finger”if ev.type == KEYEV_TOUCH_DOWN: x, y = ev.x, ev.y
This saves the starting point when you first touch the screen.
if ev.type == KEYEV_TOUCH_DRAG: dline(x, y, ev.x, ev.y, C_BLACK) x, y = ev.x, ev.y
This draws a line between the last known point and the new one, creating a fluid pen stroke.
Step 5: Keyboard controls
Section titled “Step 5: Keyboard controls”if ev.type == KEYEV_DOWN and ev.key == KEY_EXE: clear()
Press [EXE] to clear the screen and restart drawing.
if ev.type == KEYEV_DOWN and ev.key == KEY_EXIT: break
You can optionally add this to allow quitting with [CLEAR].
Final Code
Section titled “Final Code”from gint import *
def clear(): dclear(C_WHITE) dtext(2, 2, C_BLACK, "Touch: draw | EXE: clear | Clear: quit")
clear()dupdate()
x, y = -1, -1
while True: ev = pollevent() while ev.type != KEYEV_NONE: if ev.type == KEYEV_DOWN and ev.key == KEY_EXE: clear() if ev.type == KEYEV_TOUCH_DOWN: x, y = ev.x, ev.y if ev.type == KEYEV_TOUCH_DRAG: dline(x, y, ev.x, ev.y, C_BLACK) x, y = ev.x, ev.y ev = pollevent() dupdate()
Want to try more touch projects? Try:
- A touch paint app with colors
- A grid tile editor
- A basic drag & drop UI
Need help with ideas? Ask the 👨💻 PythonExtra ChatGPT!