# 文字单摆运动

## 主程序源代码

```"""
文字单摆运动.py
"""
import time                       # 导入时间模块
from turtle import *              # 从海龟模块导入所有命令
from write_patch import *         # 本补丁模块也是由turtle模块开发的

width,height = 480,360
screen = Screen()
screen.tracer(0,0)
screen.setup(width,height)
screen.bgcolor('yellow')
screen.title("Python Turtle Graphics 本程序由纯turtle模块制作")

def pendulum():

cp = Turtle(visible=False)
cp.penup()
cp.speed(0)
cp.goto(0,100)
a = 0
da = 1
zt = ('',17,'normal')
while True:
cp.clear()
cp.write('writed by lixingqiu',font=zt,angle=a)
time.sleep(0.01)
a = a - da
if a > 0.8 and a<0.9 :
print(a)
time.sleep(1)
if a < -90:
da = da - 0.1
else:
da = da + 0.1

def gundong():
info = '本程序由纯海龟模块实现'
tom = Turtle(visible=False)
tom.sety(-50)
tom.penup()
tom.speed(1)
zt = ('黑体',32,'normal')
a = 0
da = 1                      # 每次转动的角度
while True:
for zi in info:
tom.setx(-width/2-50)
while tom.xcor() -50 < width/2:
tom.clear()
tom.dot(100,'cyan')
tom.color('red')
tom.pendown()
tom.fd(50)
tom.penup()
tom.bk(50)
tom.write(zi,align='center',font=zt,angle=a)
tom.right(da)
tom.setx(tom.xcor() + da * 2*3.14159*50/360)
time.sleep(0.01)
a = a - da
a = a % 360

w = Turtle(shape='blank')
w.penup()
w.sety(-140)
w.write('免费下载网址: www.lixingqiu.com',align='center',font=('',14,'normal'))
screen.mainloop()

```

write_patch.py源代码:

```from turtle import RawTurtle,TurtleScreenBase,Turtle,Screen

__author__ = '李兴球'
__blog__ = 'www.lixingqiu.com'

def __write(self, pos, txt, align, font, pencolor,angle):
"""
用指定的颜色和字体在画布上写文本。返回文本项目和其绑定盒的右x-1坐标。
"""
x, y = pos
x = x * self.xscale
y = y * self.yscale
anchor = {"left":"sw", "center":"s", "right":"se" }
item = self.cv.create_text(x-1, -y, text=txt, anchor=anchor[align],
fill= pencolor, font=font,angle=angle)
x0, y0, x1, y1 = self.cv.bbox(item)
self.cv.update()
return item, x1-1
TurtleScreenBase._write = __write

def _write(self,txt,align,font,angle=0):
"""海龟的write的预定义方法
"""
item, end = self.screen._write(self._position, txt,
align, font,self._pencolor,angle)
self.items.append(item)
if self.undobuffer:
self.undobuffer.push(("wri", item))
return item,end                 # 本来只返回end,这里增加了item

def _writea(self, arg, move=False, align="left", font=("黑体",12,"normal"),angle=0):
"""在海龟的当前坐标写文本。
参数:
arg -- 要写在海龟画图屏幕上的信息,
move (可选) -- True/False,
align (可选) -- 左，中，右( "left", "center" or right"),
font (可选) -- 三元组 (字体名称, 字体大小,字体类型),
angle (可选) -- 角度值,如90,180

根据对齐方式和给定的字体样式在屏幕写文本。
如果move为真，那么海龟(画笔)会移到文本的右下角，缺省为假。

举例 (假设有一个海龟实例为turtle):
>>> turtle.write('风火轮编程 ', True, align="center")
>>> turtle.write((0,0), True)
"""
if self.undobuffer:
self.undobuffer.push(["seq"])
self.undobuffer.cumulate = True
item,end = self._write(str(arg), align.lower(), font,angle)
if move:
x, y = self.pos()
self.setpos(end, y)
if self.undobuffer:
self.undobuffer.cumulate = False
return item                   # 这里本来不返回item

RawTurtle._write = _write         # 重定义_write
RawTurtle.write = _writea         # 重定义write

if __name__ == "__main__":

tom = Turtle(visible=False)
tom.write('风火轮编程',angle=45)
tom.screen.mainloop()

```