最近博主在 CSDN 上看到许多关于海龟画图的案例,如画圣诞树、五角星等,但是都是直接给出了源码以及一些简单的注释,没有对其详细的说明,会让很多初学者迷糊很久,故这里博主详细地对 turtle 模块中的方法进行详解,让广大博友能够做到自由画图。
海龟绘图是 Python 内置的一个比较有趣的模块,模块名称为 turtle。它最初源于 20世纪60年代 的 Logo 语言,之后成为了 Python 的内置模块。海龟绘图提供了一些简单的绘图方法,可以根据编写的控制指令(代码),让一个 “海龟” 在屏幕上来回移动,而且可以在它爬行的路径上绘制图形。通过海龟绘图,不仅可以在屏幕上绘制图形,还可以看到整个绘制过程。另外,海龟绘图对初学者十分友好,它能够轻松地编写出很多有趣的实例。
在海龟绘图中,也可以输入或者输出文字,下面分别进行介绍。
输出文字可以使用 write() 方法来实现,语法如下:
def write(self, arg, move=False, align="left", font=("Arial", 8, "normal"))
参数说明:
说明:字形可设置的值为normal(表示正常)、bold(粗体)、italic(斜体)、underline(下划线)等。例如,在屏幕中心输出文字 命运给予我们的不是失望之酒,而是机会之杯。
,指定字体为宋体,字号为18,字形为normal(表示正常),代码如下:
# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:12.输出文字.py
@time:2020/12/30
"""
import turtle # 导入海龟绘图模块
turtle.color("green") # 填充颜色
turtle.up() # 抬笔
turtle.goto(-300, 50)
turtle.down() # 落笔
turtle.write("命运给与我们的不是失望之酒,而是机会之杯。", font=("宋体", 18, "normal"))
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
运行上面的代码,将显示下图所示的效果。
从上图中可以看出,输出文字时,海龟光标并没有移动,如果将write() 方法修改为以下代码:
turtle.write("命运给与我们的不是失望之酒,而是机会之杯。", True, font=("宋体", 18, "normal"))
在海龟绘图中,如果想与用户交互,获取用户输入的文字,可以通过 textinput() 方法弹出一个输入对话框来实现。该方法的返回值为字符串类型。textinput() 方法的语法如下:
def textinput(self, title, prompt):
参数说明:
例如,先弹出输入对话框,要求用户输入一段文字,然后输出到屏幕上,代码如下:
# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:13.输入文字.py
@time:2020/12/30
"""
import turtle # 导入海龟绘图模块
turtle.color("green") # 填充颜色
word = turtle.textinput("温馨提示:", "请输入要打印的文字") # 弹出输入对话框
turtle.write(word, True, font=("宋体", 18, "italic")) # 输出文字
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
通过 textinput() 方法返回的内容为字符串,如果想要输入数值,可以使用 numinput() 方法实现,该方法的返回值为浮点类型。numinput() 方法的语法如下:
def numinput(self, title, prompt, default=None, minval=None, maxval=None):
参数说明:
例如,先弹出输入对话框,要求用户输入一个 1~9
之间的数,然后输出到屏幕上,代码如下:
import turtle # 导入海龟绘图模块
turtle.color("green") # 填充颜色
# 数字输入框
num = turtle.numinput("温馨提示:", "请输入1~9之间的数字:", default=1, minval=1, maxval=9)
turtle.write(num, True, font=("宋体", 18, "normal")) # 输出获取的数字
turtle.done() # 海龟绘图程序的结束语句(开始主循环)
在海龟绘图中,也支持与鼠标或键盘的交互操作。它提供了监听键盘按键事件、鼠标事件以及定时器等方法,下面分别进行介绍。
海龟绘图中提供了对键盘事件进行监听的方法。在执行键盘事件监听时,需要调用 listen() 方法。该方法用于让海龟屏幕(TurtleScreen)可以获得焦点,为接收键盘事件做好准备。调用listen() 方法的代码如下:
turtle.listen()
海龟绘图中的键盘事件主要有以下两个:onkey() | onkeyrelease():当按键被按下并释放时发生,语法如下:
def onkey(self, fun, key):
def onkeyrelease(self, fun, key):
参数说明:
a
或 space
。当指定 a
时,表示当按下并释放 键时执行 fun 参数所指定的函数。例如,当按下并释放键盘上的
# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:15.键盘事件.py
@time:2020/12/30
"""
import turtle
def move():
turtle.left(90)
turtle.forward(100)
turtle.listen()
turtle.onkey(move, "w")
turtle.done()
onkeypress():当按键被按下(不释放)时发生,语法如下:
def onkeypress(self, fun, key=None):
参数说明:
a
或 space
。当指定 a
时,表示当按下(不释放) 键时执行 fun 参数所指定函数。如果未指定,则移除事件绑定。例如,当一直按下(不释放)键盘上的 ↑
键时,让海龟一直向前移动,释放按键即停止移动,代码如下:
import turtle
def move():
turtle.forward(2)
turtle.listen()
turtle.onkeypress(move, "Up")
turtle.done()
运行上面的代码,当一直按下(不释放) 键盘上的 ↑
键时,海龟将一直向前移动。
在海龟绘图中提供了对鼠标事件进行监听的方法。海龟绘图中的鼠标事件主要有以下 3 个:
(1) onclick() | onscreenclick():表示处理鼠标点击屏幕事件,语法如下:
turtle.getscreen().onclick(self, fun, btn=1, add=None):
turtle.onscreenclick(fun, btn=1, add=None)
当使用鼠标左键点击屏幕时,显示点击位置的坐标,代码如下:
# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:16.鼠标事件.py
@time:2020/12/30
"""
import turtle
def click(x, y):
turtle.clear()
turtle.write((x, y), font=("宋体", 18, "normal"))
turtle.onscreenclick(click, 1)
turtle.done()
onclick() 方法也可以作为海龟对象的方法,例如,下面的代码将实现在单击屏幕中的海龟时,显示当前的坐标位置:
import turtle
t = turtle.Turtle()
t.shape("turtle")
def click(x, y):
turtle.clear()
turtle.write((x, y), font=("宋体", 15, "normal"))
t.onclick(click, 1)
turtle.done()
运行上面的代码,只在单击屏幕上的小海龟时,才会显示当前的坐标位置。
(2) onrelease():该方法为海龟对象的方法,表示处理鼠标释放事件语法如下:
turtle.onrelease(self, fun, btn=1, add=None):
参数说明:
例如,创建一个海龟对象,当用户在海龟对象上按下鼠标左键并释放时显示释放时鼠标位置的坐标,代码如下:
import turtle
t = turtle.Turtle()
t.shape("turtle")
def fun(x, y):
turtle.clear()
turtle.write((x, y), font=("宋体", 15, "normal"))
t.onrelease(fun, 1)
turtle.done()
(3) ondrag():表示处理鼠标拖动事件,语法如下:
def ondrag(self, fun, btn=1, add=None):
参数说明:
例如,创建一个海龟对象,并且为该对象添加拖动事件,实现拖动屏幕中的海龟时,在屏幕上手绘线条,代码如下:
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.color("blue")
turtle.listen()
def fun(x, y):
t.pendown()
t.goto(x, y)
t.ondrag(fun, 1)
turtle.done()
在海龟绘图中,提供了 ontimer() 方法来实现一个计时器,用于达到指定时间时,执行一个操作。语法如下:
def ontimer(self, fun, t=0):
参数说明:
例如,安装一个计时器,在 300 毫秒后调用画正方形的函数,代码如下:
# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:14.计时器.py
@time:2020/12/30
"""
import turtle
def fun(): # 绘制正方形
for i in range(4):
turtle.forward(100)
turtle.left(90)
turtle.getscreen().ontimer(fun, 300) # 设置计时器
turtle.done() # 海龟绘图程序的结束语句(开始主循环)