python海龟绘图 玫瑰花_Python海龟绘图——交互简介

前面我们学习了turtle库一些绘图指令程序,可以实现一些有趣的绘图。今天就要给大家介绍如何让程序能够对鼠标点击、按下键盘等做出响应。

我们接触过的一些应用程序,大多都是交互性的,它允许用户触摸、点击、拖动或者按下按钮,能够感知到对程序的控制。我们把它叫做事件驱动程序。事件处理程序(事件监听程序)

当我们点击一个图标的时候,可以打开一个窗口,当我们点击窗口的关闭按钮,可以关闭一个窗口,这些都是事件处理程序,因为它会响应或处理来自用户的事件。

正常时候,这些事件就耐心的坐在那里等着,等着用户来告诉它做什么。鼠标点击海龟屏幕事件——onscreenclick

1、turtle.onscreenclick(fun, btn=1, add=None)

fun -- 一个函数,调用时将传入两个参数表示在画布上点击的坐标。

btn -- 鼠标按钮编号,默认值为 1 (鼠标左键)

add -- True 或 False -- 如为 True 则将添加一个新绑定,否则将取代先前的绑定

绑定 fun 指定的函数到鼠标点击屏幕事件。如果 fun 值为 None,则移除现有的绑定

turtle.onscreenclick()接收的参数不是一个值,而是另外一个函数的名称,即setpos()函数,获取鼠标在海龟屏幕上点击的位置坐标(x,y)。回调函数

把一个函数作为参数传递给另外一个函数,则称前者为回调函数(它将由其他的函数回调)。

当我们将一个函数当作参数发送给另外一个函数的时候,内部的函数在其函数名称的后面不需要一对圆括号,例如turtle.onscreenclick(setpos)。

1、from turtle import *

2、pencolor('green') # 设置画笔的颜色为green

3、pensize(60) # 设置画笔的宽度为60

4、speed()

5、bgcolor('black') # 修改背景颜色为黑色

6、onscreenclick(setpos) # 将海龟的位置设置为用户点击的位置

当用户在屏幕上点击鼠标的时候,将海龟的位置移动到点击的位置,而此时海龟的钢笔默认是放下的(pendown),所以在把海龟位置设置为鼠标点击的位置时,就会在画布上留下一条直线。

setpos()函数作为turtle.onscreenclick()的回调函数,可以实现和用户交互,我们点击鼠标的时候,他就会朝着我们点击的位置绘制直线。监听键盘事件——onkeypress

使用键盘交互,使用户可以通过按下箭头键来控制海龟在屏幕上移动。

1、turtle.onkeypress(fun, key=None)

fun -- 一个无参数的函数或 None

key -- 一个字符串: 键 (例如 "a") 或键标 (例如 "space")

key一个字符串,将键盘按键设置为回调函数。如何告诉计算机开始监听按键事件:

turtle.listen(xdummy=None, ydummy=None)设置焦点到 TurtleScreen (以便接收按键事件)

想要让海龟窗口接收到我们的按键事件,就必须要使我们的海龟窗口移动到最前面并且接收焦点,这一点和鼠标点击不同。

当我们在桌面上点击一个窗口的时候,被点击的窗口移到了前面并且接收焦点,这样这个窗口才会接收用户的输入。

这里我在桌面打开了3个记事本,目前“3.txt”这个窗口处于桌面焦点中,现在只有“3.txt”这个记事本窗口可以接收用户的输入,那如果想要在“2.txt”输入内容怎么办?只需要用鼠标点击一下“2.txt”这个窗口,这个窗口就会成为屏幕上的焦点,既可以接收用户的输入了。使

用鼠标可以轻松的完成这样的动作,但是使用键盘的时候,只是按下键盘并不会窗口接收到那些按键事件。

所以,使用turtle.listen()指令可以确保海龟窗口处于桌面的焦点中,这样就可以监听按键事件。

在程序的最后使用listen()命令告诉计算机开始处理我们使用onkeypress()函数连接到函数的所有那些按键的按键事件。

from turtle import *

speed(0)

def up(): # 向上

setheading(90) # 海龟面向屏幕上方

fd(50) # 向上前进50像素

def down(): # 向下

setheading(-90) # 海龟面向屏幕下方

fd(50) # 向下前进50像素

def left(): # 向左

setheading(180) # 向左

fd(50) # 向左前进50像素

def right(): # 向右

setheading(360) # 向右

fd(50) # 向右前进50像素

onkeypress(up,"Up") # 向上

onkeypress(left,"Left")

onkeypress(right,"Right")

onkeypress(down,"Down")

listen() # 监听

定义了4个函数up()、down()、left()和right(),分别来响应上箭头键(↑)、下箭头键(↓)、左箭头键(←)和右箭头键(→),且允许用户通过这些键控制海龟向前移动、向下移动、向左移动和向右移动。

turtle.setheading(to_angle)设置海龟的朝向为 to_angle

通过turtle.setheading(to_angle)可以设定海龟朝向的方向。案例

定义一个绘制随机大小和颜色的螺旋线,让螺旋线绘制在我们鼠标点击的屏幕位置。

# 导入模块

from turtle import *

import random

bgcolor('black')

speed(0)

# 画笔颜色列表

colors = ['gray','white','orange','blue','red','yellow','purple']

# 定义绘制图形函数,在鼠标点击的位置开始绘制

def draw(x,y):

pencolor(random.choice(colors)) # 设置画笔的颜色

size = random.randint(10,40) # 绘制图形的边数,利用随机数来设置

pu()

goto(x,y)

pd()

for x in range(size): # for循环遍历

fd(x * 2)

lt(91)

onscreenclick(draw) # 鼠标点击事件

导入随机模块import random,这样可以随机设置画笔颜色和螺旋线的大小:

colors = ['gray','white','orange','blue','red','yellow','purple']

pencolor(random.choice(colors))

size = random.randint(10,40)

随机模块,以后我们会详细介绍学习。

onscreenclick(draw),每当用户在屏幕上点击鼠标的时候,就会调用draw(x,y)函数,事件监听器就会自动将鼠标点击的x坐标和y坐标传递给draw回调函数。

可以尝试在鼠标点击的位置绘制别的图形。

更多可以关注公众号【陪孩子一起学编程】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!使用Python海龟绘图库可以让我们绘制出皮卡丘的图像。下面是一个简单的示例代码: ```python import turtle as t # 设置画布大小和背景色 t.setup(800, 600) t.bgcolor('yellow') # 绘制皮卡丘的头部 t.penup() t.goto(-100, 100) t.pendown() t.fillcolor('yellow') t.begin_fill() t.circle(100) t.end_fill() # 绘制皮卡丘的眼睛 t.penup() t.goto(-60, 120) t.pendown() t.fillcolor('white') t.begin_fill() t.circle(20) t.end_fill() t.penup() t.goto(-40, 120) t.pendown() t.fillcolor('black') t.begin_fill() t.circle(10) t.end_fill() t.penup() t.goto(-140, 120) t.pendown() t.fillcolor('white') t.begin_fill() t.circle(20) t.end_fill() t.penup() t.goto(-120, 120) t.pendown() t.fillcolor('black') t.begin_fill() t.circle(10) t.end_fill() # 绘制皮卡丘的嘴巴 t.penup() t.goto(-80, 30) t.pendown() t.setheading(-60) t.circle(80, 120) t.fillcolor('black') t.begin_fill() t.circle(80, 120) t.setheading(0) t.circle(80, 120) t.end_fill() # 绘制皮卡丘的脚 t.penup() t.goto(-70, -70) t.pendown() t.setheading(-30) t.forward(80) t.setheading(0) t.forward(40) t.setheading(90) t.fillcolor('black') t.begin_fill() t.circle(40, 180) t.end_fill() t.setheading(180) t.forward(40) t.setheading(-90) t.circle(40, 180) t.setheading(-60) t.forward(80) # 绘制皮卡丘的手臂 t.penup() t.goto(30, -70) t.pendown() t.setheading(-30) t.forward(80) t.setheading(0) t.forward(40) t.setheading(90) t.fillcolor('black') t.begin_fill() t.circle(40, 180) t.end_fill() t.setheading(180) t.forward(40) t.setheading(-90) t.circle(40, 180) t.setheading(-60) t.forward(80) # 隐藏画笔 t.hideturtle() # 完成绘制 t.done() ``` 运行以上代码,即可在窗口中看到绘制出的皮卡丘图像。你也可以根据需要调整代码中的坐标和尺寸来绘制更精确的图像。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值