python中如何让turtle在制图中间写字_阅读Turtle库源码
(⼆)如何在turt。。。
继续带领⼤家阅读海龟库源码。今天来
介绍⼀下如何在turtle绘图窗⼝中添加按钮, 从⽽实现海龟库下⼀些交互式程序的开发。二郎神和孙悟空
python基础代码写字上⼀讲介绍了turtle源码中的类_Root,它是启动海龟绘图的根窗⼝类,继承于tkinter库的TK类,当运⾏以下代码时
import turtle
r = turtle._Root()
r.set_geometry(800, 800, 0, 0)
r.mainloop()
会弹出⼀个tk窗⼝。
此时,窗⼝中啥都没有。利⽤前⼀篇⽂章所述(阅读Turtle库源码(⼆) | 如何在turtle绘图窗⼝中添加多画布!), 要利⽤海龟绘图,我们⾸先要往窗⼝中添加画布,代码如下。
import turtle
r = turtle._Root()
r.set_geometry(800, 800, 0, 0)墨西哥vs瑞典比分
# 添加画布
cv2 = turtle.ScrolledCanvas(r)
cv2.pack(expand=True, fill=tk.BOTH)
r.mainloop()
启动后,弹出以下带画布的窗⼝。
接下来,放上⼀只海龟。
import turtle数据库delete的用法及例句
r = turtle._Root()
r.set_geometry(800, 800, 0, 0)
# 添加画布
cv2 = turtle.ScrolledCanvas(r)
cv2.pack(expand=True, fill=tk.BOTH)
t = turtle.RawPen(cv2)
t.shape('turtle')
t.shapesize(2, 2)
t.pensize(5)
r.mainloop()
此时,画布的中央出现了⼀只海龟,形状是⼩球。
加下来注意啦,我们开始向海龟绘图窗⼝添加其他tkinter组件,⾸先添加⼀个Frame框架,并在框架上增加⼀个按钮,⽤于控制海龟的运动轨迹。
import turtle
r = turtle._Root()
r.set_geometry(800, 800, 0, 0)
# 添加画布
cv2 = turtle.ScrolledCanvas(r)
cv2.pack(expand=True, fill=tk.BOTH)
t = turtle.RawPen(cv2)
t.shape('turtle')
t.shapesize(2, 2)
t.pensize(5)
# 添加Frame组件
frame1 = tk.Frame(r,width=200)
frame1.pack(side=tk.LEFT, expand=True, fill=tk.BOTH)
count = 0
flag = 1
# 添加Button组件
btn01 = tk.Button(frame1, width = 10, height = 5)
btn01.pack(side=tk.LEFT,padx=5, pady=10)
r.mainloop()
运⾏后,效果如下。
加下来,再加⼏个按钮,分别实现⽤于控制海龟绘图的不同功能。
import turtle
r = turtle._Root()
r.set_geometry(800, 800, 0, 0)
# 添加画布
cv2 = turtle.ScrolledCanvas(r)
cv2.pack(expand=True, fill=tk.BOTH)
t = turtle.RawPen(cv2)
t.shape('turtle')
t.shapesize(2, 2)
t.pensize(5)
# 添加Frame组件
frame1 = tk.Frame(r,width=200)
frame1.pack(side=tk.LEFT, expand=True, fill=tk.BOTH) figure(bg='pink')
count = 0
flag = 1
# 添加Button组件
btn01 = tk.Button(frame1, width = 10, height = 5)
linux怎么看telnet是不是通
btn01.pack(side=tk.LEFT,padx=5, pady=10)
# 放画笔
btn02 = tk.Button(frame1, width=10, height=5)
btn02.pack(side=tk.LEFT,padx=5, pady=10)
# 抬画笔
btn04 = tk.Button(frame1, width=10, height=5)
btn04.pack(side=tk.LEFT, padx=5, pady=10)
# 清除
btn03 = tk.Button(frame1, width=10, height=5)
btn03.pack(side=tk.LEFT, padx=5, pady=10)
# 加速
btn05 = tk.Button(frame1, width=10, height=5)
btn05.pack(side=tk.LEFT, padx=5, pady=10)
# 扣戳
btn06 = tk.Button(frame1, width=10, height=5) figure(text='扣戳')
btn06.pack(side=tk.LEFT, padx=5, pady=10)
# 关闭
btn07 = tk.Button(frame1, width=10, height=5) figure(text='换背景')
btn07.pack(side=tk.LEFT, padx=5, pady=10) r.mainloop()
运⾏后,效果如下。
接下来分别编写,每⼀个按钮对应的触发事件函数。def change_statics():
global count
if count % 2 == 0:
a.pause()
else:
count += 1
def draw():
t.down()
def draw_up():
t.up()
def clear_all():
t.clear()
def add_speed():
global speed
speed += 1
t.speed(speed)
def add_stamp():
t.stamp()
def add_destroy():
r.destroy()
def change_color():
pencolor = random.choice(colors)
bgcolor = random.choice(colors)
t.screen.bgcolor(bgcolor)
t.pencolor(pencolor)
最后新建⼀个类TurtleSport,继承于threading.Thread类,⽤于实现⼀个控制海龟运动的线程实例对象。class TurtleSport(threading.Thread):
def __init__(self, *args, **kwargs):
super(TurtleSport, self).__init__(*args, **kwargs)
self.__flag = threading.Event()
self.__flag.set()
self.__running = threading.Event()
self.__running.set()
def run(self):
while self.__running.isSet():
self.__flag.wait()
x = random.randint(-t.screen.canvwidth//2, t.screen.canvwidth//2)
y= random.randint(-t.screen.canvheight // 2, t.screen.canvheight // 2)
<(x, y)
time.sleep(0.2)
def pause(self):
self.__flag.clear()
def resume(self):
self.__flag.set()
def stop(self):
self.__flag.set()
self.__running.clear()
最后主程序中,加⼊代码,调⽤该线程。
a = TurtleSport()
a.setDaemon(True)
a.start()
好了,程序开始运⾏啦!
-end-
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论