今天继续带领大家阅读海龟库源码。今天来
介绍一下如何在turtle绘图窗口中添加任意多的画布。
要学会如何在turtle绘图窗口中添加画布,我们要先来了解turtle模块中的重要类_Root.
class _Root(TK.Tk):
"""Root class for Screen based on Tkinter."""
def __init__(self):
TK.Tk.__init__(self)
def setupcanvas(self, width, height, cwidth, cheight):
self._canvas = ScrolledCanvas(self, width, height, cwidth, cheight)
self._canvas.pack(expand=1, fill="both")
def _getcanvas(self):
return self._canvas
def set_geometry(self, width, height, startx, starty):
self.geometry("%dx%d%+d%+d"%(width, height, startx, starty))
def ondestroy(self, destroy):
self.wm_protocol("WM_DELETE_WINDOW", destroy)
def win_width(self):
return self.winfo_screenwidth()
def win_height(self):
return self.winfo_screenheight()
该类继承于tkinter库的TK类,它代表的是turtle绘图的根窗口,当我们运行以下代码。
import turtle
r = turtle._Root()
r.mainloop()
就会弹出一个tk窗口。
海龟绘图根窗口--tk窗口
目前我们的窗口上空空如也,啥都没有?要让海龟绘图首先应该有画布,所以,接下来,我们现在上面放置一个画布。
import turtle
r = turtle._Root()
r.setupcanvas(800,800,600,600)
r.mainloop()
这样就会在tk窗口中添加一个高600,宽600的画布。
海龟绘图根窗口--带画布
接下来,我们在此窗口中再添加一个画布。
import turtle
r = turtle._Root()
r.set_geometry(800,800,0,0)
# 放第一个画布
cv2 = turtle.ScrolledCanvas(r)
cv2.pack(expand = True, fill = tk.BOTH)
cv2.reset(400, 400)
t1 = turtle.RawPen(cv2)
t1.shape('turtle')
t1.screen.bgcolor('pink')
# 放第二个画布
cv3 = turtle.ScrolledCanvas(r)
cv3.pack(expand = True, fill = tk.BOTH)
cv3.reset(400, 400)
t2 = turtle.RawPen(cv3)
t2.shape('turtle')
t2.screen.bgcolor('gray')
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)
t1 = turtle.RawPen(cv2)
t1.shape('turtle')
t1.screen.bgcolor('pink')
# 放第二个画布
cv3 = turtle.ScrolledCanvas(r)
cv3.pack(expand=True, fill=tk.BOTH)
t2 = turtle.RawPen(cv3)
t2.shape('turtle')
t2.screen.bgcolor('gray')
th1 = Thread(target = draw_spiral_loop, args = (t1, 1))
th2 = Thread(target=draw_spiral_loop1, args=(t2, 2))
th1.start()
th2.start()
r.mainloop()
我们一起来看一下启动后的效果吧!
总结一下,本篇文章中,我们介绍了如何在turtle绘图窗口中添加多个画布Canvas,那么,对于tkinter的其他组件例如:按钮、标签、下拉列表、单选框与复选框等等该如何添加至
turtle绘图窗口呢?我们下一篇文章继续聊!再会!
由于篇幅所限,本篇文章中的完整代码并未全部公布,若要索取完整程序代码,畅谈合作与Python技术交流、咨询“在线课程”,请扫描以下二维码,进群后与我们联系!
最后打个广告
。我们 "Python青少年编程班" 计划近期新开一期在线学习班,从零基础讲起,基础部分预计40次课授完,课程采用直播授课的方式,每节课授课时间1个半小时,费用优惠,具体学习内容如下:
若您有意参加,请扫描以上二维码与我们联系。
-end-
Python 青少年编程
编程班学生作品展示系列:
Python数据教学案例与公益课:
Python微课堂系列: