上节课学了键盘控制海龟。这节课换成鼠标——点哪画哪,拖哪画哪,像用画图软件一样!
一、onclick:鼠标点击
每次点击鼠标,turtle 会告诉你点击位置的坐标 (x, y),你决定怎么画!
import turtle
screen = turtle.Screen()
t = turtle.Turtle()
t.speed(5)
t.pensize(3)
# 点击哪里,海龟就游到哪里并画圆圈
def draw_circle(x, y):
t.penup()
t.goto(x, y)
t.pendown()
t.begin_fill()
t.circle(15)
t.end_fill()
screen.onclick(draw_circle) # 绑定鼠标点击事件
screen.exitonclick() # 点击窗口退出
👆 点击屏幕任意位置,就会出现一个填充圆!可以画一朵圆形花🌸
二、实战:鼠标连点画图 🖱️
import turtle, random
screen = turtle.Screen()
screen.setup(800, 600)
t = turtle.Turtle()
t.speed(5)
t.pensize(3)
t.pendown()
t.pencolor("green")
# 每次点击,海龟游过去并画线(连成轨迹)
def move_to(x, y):
t.goto(x, y)
screen.onclick(move_to)
screen.exitonclick()
# 试试点几个点,连起来就是你的图案!
三、ondrag:鼠标拖拽 🖌️
ondrag 比 onclick 更实用——按住鼠标拖动,一边拖一边画,像画图软件一样!
import turtle
screen = turtle.Screen()
t = turtle.Turtle()
t.speed(5)
t.pensize(3)
t.pencolor("navy")
t.pendown()
# 拖动鼠标,海龟跟着画线
def draw(x, y):
t.goto(x, y)
t.ondrag(draw) # ondrag 比 onclick 更实用:边拖边画!
screen.exitonclick()
# 按住鼠标随便拖,画出你的图案!
💡 ondrag 让海龟在鼠标按住并移动的过程中持续画线,非常适合自由绘画!
四、实战:完整画图板(鼠标+键盘组合) 🎨
import turtle
screen = turtle.Screen()
screen.setup(800, 600)
t = turtle.Turtle()
t.speed(5)
t.pensize(3)
t.pencolor("black")
t.pendown()
COLORS = ["black","red","orange","green","blue","purple","white"]
ci = 0
eraser = False
def draw(x, y):
if eraser:
t.color("white", "white")
t.pensize(20)
else:
t.color(COLORS[ci], COLORS[ci])
t.pensize(3)
t.goto(x, y)
def up(): t.penup()
def down(): t.pendown()
def next_color():
global ci
ci = (ci + 1) % len(COLORS)
def prev_color():
global ci
ci = (ci - 1) % len(COLORS)
def toggle_eraser():
global eraser
eraser = not eraser
def clear(): t.clear()
t.ondrag(draw)
screen.onkey(up, 'Up')
screen.onkey(down, 'Down')
screen.onkey(next_color, 'Right')
screen.onkey(prev_color, 'Left')
screen.onkey(toggle_eraser, 'space')
screen.onkey(clear, 'c')
screen.listen()
screen.exitonclick()五、onclick 和 ondrag 参数说明
# onclick:鼠标点击事件
screen.onclick(函数名) # 默认左键(btn=1)
screen.onclick(函数名, btn=3) # btn=2中键 btn=3右键
# ondrag:鼠标拖拽事件
t.ondrag(函数名) # 拖动时持续触发
# 重要:函数要有 (x, y) 两个参数!
def my_func(x, y):
print(f"坐标:({x}, {y})")六、实战:几何图案生成器 🟥🟩🟦
import turtle, random
screen = turtle.Screen()
screen.setup(700, 500)
t = turtle.Turtle()
t.speed(8)
t.pensize(2)
colors = ["red", "orange", "yellow", "green", "blue", "purple"]
# 画一个六边形
for i in range(6):
t.pencolor(random.choice(colors))
t.forward(100)
t.right(60)
# 画多个叠加六边形(随机位置)
for _ in range(5):
x = random.randint(-200, 200)
y = random.randint(-150, 150)
t.penup()
t.goto(x, y)
t.pendown()
for i in range(6):
t.pencolor(random.choice(colors))
t.forward(60)
t.right(60)
screen.exitonclick()点击任意位置画随机图案,ondrag 拖出你的手绘轨迹,试试吧!
七、小挑战
-
- 🟢 简单:用 onclick 做一个"点击画星星"——每个点击位置画一颗五角星
-
- 🟡 中等:在画图板里加"画圆模式"和"画方模式"切换(按 R 画圆,按 S 画方)
-
- 🔴 困难:做一个"印章工具"——鼠标点击时,用 turtle 的 stamp() 盖一个海龟脚印
-
八、下期预告
键盘 + 鼠标都能控制了!下节课挑战更炫酷的:屏幕动画——让多个角色同时动起来!
下期:《turtle第11课:多角色动画》
有问题欢迎留言!