Python系列课程:图形库Turtle的使用(一)
Python系列课程:图形库Turtle的使用(二)
Python系列课程:图形库Turtle的使用(三)
我们来深度分析下Turltle这个绘图工具类的代码
如下代码可以正常的执行
#coding:utf-8
#引入turtle外部库,turtle是python中一个绘制图像的外部库
import turtle
myTurtle = turtle.Turtle();
myTurtle.forward(100);
turtle.done();
疑问1:为什么上述代码不能写成如下形式
#coding:utf-8
#引入turtle外部库,turtle是python中一个绘制图像的外部库
import turtle
myTurtle = turtle.Turtle();
myTurtle.forward(100);
myTurtle.done();
分析如下
先看下Turtle的继承关系,如下图所示
可以看出当我们通过turtle.Turtle() 创建Turtle的实例之后,便可以通过该实例调用其父类的方法,此处的 forward() 即是父类的TNavigator.java的方法,
但是done() 并不是Turtle类所拥有的方法,它是turtle.py模块拥有的方法,顾只能写为turtle.done();
疑问2:turtle.done()方法的作用是什么
我们先看下源码
done = mainloop = TK.mainloop
他调用TK的mainloop方法
def mainloop(n=0):
"""Run the main loop of Tcl."""
_default_root.tk.mainloop(n)
这里的done()其实就是开启一个消息循环,循环接收其他事件如按键事件,通过这个方法,Turtle的图形窗口就不会消失,可以持续接受按键事件;
你可以将turtle.done()方法注释掉看下,Turtle的图形窗口会一闪就消失了
疑问3:为什么如下代码Eclipse中会报Undefined variable from import: forward
#coding:utf-8
#引入turtle外部库,turtle是python中一个绘制图像的外部库
import turtle
turtle.forward(100);
turtle.done();
在调用forward方法的时候,编译器会报红色,但是不影响运行,这是因为forwoard是父类TNavigator当中的方案,按照IDE即Eclipse设置的检查规范来说,只有通过类的实例才能调用该方法;所以此处IDE报了红色error;
疑问4:那为什么运行时确能正常执行?
这是因为在通过import turtle之后,在编译的时候,turtle模块会被导入,编译器在编译turtle.py的时候,会生成forward方法,此时就相当于forward方法是turtle自己的方法了