鱼C论坛

 找回密码
 立即注册
查看: 2959|回复: 13

[技术交流] 【新提醒】Python turtle教程(2)

[复制链接]
发表于 2020-5-3 12:17:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 乘号 于 2020-5-3 12:17 编辑

没错又双叒叕是我我又来了

直接上。

一、常用函数

1.forward() | fd():向前移动指定的距离。参数:一个数字(integer or float))。

turtle.forward(25)
2.backward() | bk() | back():向后移动指定的距离。参数:一个数字(integer or float))。

turtle.backward(30)
3..right() | rt():以角度单位向右转动。参数:一个数字(integer or float))。单位默认为度数,可以通过degrees()和radians()进行设置。

turtle.right(45)


4.left() lt():以角度单位向左转动。参数:一个数字(integer or float))。单位默认为度数,可以通过degrees()和radians()进行设置。

turtle.left(45)
5.goto() | steps() | setposition():移动到绝对位置,如果笔落下,画线,不改变方向。参数:x-一个数字或一对数字。y-一个数字或None。

turtle.setpos(60,30)
#60.00,30.00)
6.setx():设置第一个坐标的值即X方向。参数:一个数字(integer or float))。

turtle.setx(10)
#(10.00,0.00)
7.sety():设置第二个坐标的值即Y方向。参数:一个数字(integer or float))。

turtle.sety(10)
#(0.00,10.00)
8.setheading() | seth(): 将方向设置为to_angle.就是东西南北方向。具体如下:

标准模式: 东 - 北西 南标志模式 北  东  南 西

turtle.setheading(90)
9.home() : 移动到原点 - 坐标(0,0):并将其标题设置为其起始方向(取决于模式)。

turtle.home()
# (0.00,0.00)
10.circle():绘制一个给定半径的圆。参数:radius-一个数字(半径,如果值为正则逆时针,负数为顺时针),extent-一个数字()steps- 执行的步数。

turtle.circle(120,180,5)
11.dot() :用颜色画出一个直径大小的圆点。参数:size-一个大于1的整数,可None。默认用的是pensize+4和2*pensize的最大值,color-颜色值

turtle.dot(20, "blue")
12.stamp():将当前位置上的形状复制到画布上返回stamp_id.可以调用,可以删除。

turtle.stamp()
13.clearstamp():删除stamp()返回来的值。参数:stampid。



14.clearstamps():删除全部stamp()的值。参数:stampid。

15.undo():撤销最后的动作。

16.speed():将速度设置为0..10范围内整数。如果没有参数,则返回当前速度。如果大于10或者小于0.5,则速度设置为0 。



“最快”:0 :直接成图,没有动画效果
“快”:10:大概一秒
“正常”:6:
“慢”:3
“最慢”:1
17:position() | pos(): 返回当前的位置。


turtle.pos()
# (0.00,0.00)
18.towards(): 返回当前位置同指定位置之间的角度。参数:x-一个数字或一对数字或一个实例的向量,y-如果x是数字,则为数字,否则为None。

turtle.goto(10,10)
tw = turtle.towards(0,0)
print(tw)
# 225
19.xco():r返回x坐标。

ycor():返回y坐标。

20.heading(): 返回当前的方向值。

21.distance():返回x,y两个点的直线距离

22.degrees():设置一整圈的度数。默认是360度。

23.radians():将角度测量单位设置为弧度。相当于 degrees(2*math.pi)

24.pendown() | pd() | down():放下笔,移动的时候绘图。

25.penup() | pu() | up():将提起笔,移动时无图。

26.pensize():设置线条的粗细。参数:width-一个正数

27.pen():使用键值对设置笔的属性:

“shown”: True/False
“pendown”: True/False
“pencolor”: 颜色字符串或者颜色值
“fillcolor”: 颜色字符串或者颜色值
“pensize”: 正数
“speed”: 速度范围为0..10的数字
“resizemode”: “auto” or “user” or “noresize”
“stretchfactor”: (positive number, positive number)
“outline”: 正数
“tilt”: 正数

28.isdown():如果笔停止返回True,反之False

29.pencolor():设置笔的颜色。

30.fillcolor():笔的填充色。

31.color():同时设置pencolor和fillcolor

32.filling():返回fillstate状态,如果填充则返回True,反之False。

33.begin_fill():在绘制要填充的形状前调用。当然在调用完还需要end_fill()。

34.reset():重置,将屏幕中的图纸删除,重新居中并将所有变量设置为默认值。

35.clear():删除图纸。对属性不做操作。

36.write():写文本。参数:arg-要写入的对象。move-是否移动。align-对齐方式:left,right,center。font-字体。fontname,fontsize,fonttype。

37.hideturtle() | ht() :删隐藏乌龟的形状,在做复杂绘图的时候隐藏的时候有利于提高绘图速度。

38.showturtle() | st():显示乌龟的形状。

39.isvisible():乌龟是否可见。如果可见返回True,反之则False。

40.shape():设置乌龟的图形形状,取值:“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”

41.isvisible():乌龟是否可见。如果可见返回True,反之则False。

42.resizemode():参数:rmode取值:"auto","user","noresize".

43.shapesize() | turtlesize() : 返回笔的属性。

44.shearfactor(): 设置或者返回但钱的剪切因子。

45.tilt():旋转由turtle shape角度从当前的倾斜角度。

46.settiltangle():无论当前的倾斜角度如何,旋转乌龟指向 angle 指定的方向。参数:angle -数字。已弃用

47.tiltangle():设置或者返回当前的倾斜角度。参数:angle - 数字

48.shapetransform():设置或返回乌龟的形状的当前转换矩阵。

49.get_shapepoly():返回当前形状的坐标。

50.onclick():鼠标点击事件。参数:fun-一个带有两个参数的函数,这些参数将与画布上单击点的坐标一个调用。num-鼠标按钮的数量,默认为1(左键)。add- True的时候将添加新的绑定。否则替换以前的绑定。

51.onrelease():鼠标释放事件。参数同点击事件。

52.ondrag():鼠标移动事件。参数同点击事件。

53.begin_poly(): 开始记录多边形的顶点。

54.end_poly():停止记录多边形的顶点。

55.get_poly():返回最后记录的多边形。

56.clone():创建并返回具有相同位置等等属性的乌龟克隆。

57.getturtle() | getpen() :获取trutle对象本身。

58.getscreen():返回正在绘制的对象。

59.setundobuffer(): 设置或禁用中断器。参数: size-整数。如果大小是None,则禁用缓冲区。

60.undobufferentries():返回undobuffer中的条目数。

61.bgcolor():设置或者返回当前的TurtleScreen的背景颜色。

62.bgpic():设置背景图片。参数: picname-文件名。

62.delay(): 设置或返回以毫秒为单位的绘制延迟,延迟越大,绘图越慢。

63.ontimer():定时器。

64.mainloop() | done() :开始循环 。

65.textinput() | numinput():弹出一个输入字符串和数字的窗口。

66.mode(): 三种方式:“standard”, “logo” or “world”

二。实例:画个时钟。

  1. # coding=utf-8

  2. import turtle
  3. from datetime import *


  4. # 抬起画笔,向前运动一段距离放下
  5. def Skip(step):
  6.     turtle.penup()
  7.     turtle.forward(step)
  8.     turtle.pendown()


  9. def mkHand(name, length):
  10.     # 注册Turtle形状,建立表针Turtle
  11.     turtle.reset()
  12.     Skip(-length * 0.1)
  13.     # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
  14.     turtle.begin_poly()
  15.     turtle.forward(length * 1.1)
  16.     # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
  17.     turtle.end_poly()
  18.     # 返回最后记录的多边形。
  19.     handForm = turtle.get_poly()
  20.     turtle.register_shape(name, handForm)


  21. def Init():
  22.     global secHand, minHand, hurHand, printer
  23.     # 重置Turtle指向北
  24.     turtle.mode("logo")
  25.     # 建立三个表针Turtle并初始化
  26.     mkHand("secHand", 135)
  27.     mkHand("minHand", 125)
  28.     mkHand("hurHand", 90)
  29.     secHand = turtle.Turtle()
  30.     secHand.shape("secHand")
  31.     minHand = turtle.Turtle()
  32.     minHand.shape("minHand")
  33.     hurHand = turtle.Turtle()
  34.     hurHand.shape("hurHand")

  35.     for hand in secHand, minHand, hurHand:
  36.         hand.shapesize(1, 1, 3)
  37.         hand.speed(0)

  38.         # 建立输出文字Turtle
  39.     printer = turtle.Turtle()

  40.     # 隐藏画笔的turtle形状
  41.     printer.hideturtle()
  42.     printer.penup()


  43. def SetupClock(radius):
  44.     # 建立表的外框
  45.     turtle.reset()
  46.     turtle.pensize(7)
  47.     turtle.pencolor("#ff5500")
  48.     turtle.fillcolor("green")

  49.     for i in range(60):
  50.         Skip(radius)
  51.         if i % 5 == 0:
  52.             turtle.forward(20)
  53.             Skip(-radius - 20)

  54.             Skip(radius + 20)
  55.             if i == 0:
  56.                 turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
  57.             elif i == 30:
  58.                 Skip(25)
  59.                 turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
  60.                 Skip(-25)
  61.             elif (i == 25 or i == 35):
  62.                 Skip(20)
  63.                 turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
  64.                 Skip(-20)
  65.             else:
  66.                 turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
  67.             Skip(-radius - 20)
  68.         else:
  69.             turtle.dot(5)
  70.             Skip(-radius)
  71.         turtle.right(6)


  72. def Week(t):
  73.     week = ["星期一", "星期二", "星期三",
  74.             "星期四", "星期五", "星期六", "星期日"]
  75.     return week[t.weekday()]


  76. def Date(t):
  77.     y = t.year
  78.     m = t.month
  79.     d = t.day
  80.     return "%s-%d-%d" % (y, m, d)


  81. def Tick():
  82.     # 绘制表针的动态显示
  83.     t = datetime.today()
  84.     second = t.second + t.microsecond * 0.000001
  85.     minute = t.minute + second / 60.0
  86.     hour = t.hour + minute / 60.0
  87.     secHand.setheading(6 * second)
  88.     minHand.setheading(6 * minute)
  89.     hurHand.setheading(30 * hour)

  90.     turtle.tracer(False)

  91.     printer.forward(65)
  92.     printer.write(Week(t), align="center",
  93.                   font=("Courier", 14, "bold"))
  94.     printer.back(130)
  95.     printer.write(Date(t), align="center",
  96.                   font=("Courier", 14, "bold"))
  97.     printer.home()
  98.     turtle.tracer(True)

  99.     # 100ms后继续调用tick
  100.     turtle.ontimer(Tick, 100)


  101. def main():
  102.     # 打开/关闭龟动画,并为更新图纸设置延迟。
  103.     turtle.tracer(False)
  104.     Init()
  105.     SetupClock(160)
  106.     turtle.tracer(True)
  107.     Tick()
  108.     turtle.mainloop()


  109. if __name__ == "__main__":
  110.     main()
复制代码


完了。

记得评分 评分.gif

评分

参与人数 3鱼币 +5 收起 理由
时而动摇 + 3
亢一飞 + 1 鱼C有你更精彩^_^
Hello. + 1 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-3 12:19:34 | 显示全部楼层
感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-3 12:23:51 | 显示全部楼层
这个标题,,,我还以为有人回帖了呢……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-3 12:26:27 | 显示全部楼层
liuzhengyuan 发表于 2020-5-3 12:23
这个标题,,,我还以为有人回帖了呢……

被骗了吧哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-3 14:47:03 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 19:58:31 | 显示全部楼层
liuzhengyuan 发表于 2020-5-3 12:23
这个标题,,,我还以为有人回帖了呢……

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-30 10:58:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 20:51:39 | 显示全部楼层
太感谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-15 23:30:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-5 21:52:48 | 显示全部楼层
楼主请问下保存为eps文件的具体步骤
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-11 13:13:38 | 显示全部楼层
尤物啊,thx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-21 17:32:26 | 显示全部楼层
本帖最后由 山重水复疑无路 于 2021-7-22 07:19 编辑

这是我见过最全的,谢谢楼主了;
我发现第五个setpos(x,y)也可以,
最后问一下:怎样才能斜着写字,这个问题到处都找不到答案,求解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 17:43:08 | 显示全部楼层
太好了,谢谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-21 13:23:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 17:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表