发布网友 发布时间:2024-09-15 03:23
共1个回答
热心网友 时间:2024-09-21 02:40
前言大家小时候都玩过涂鸦吧,不管在哪里,只有有画纸和彩笔,画布上就能出现想象力丰富的图案。
上学时,我们面对难题,大家都喜欢在画纸上把自己的思路画出来
如今,工作中不管是个人还是团队,在画图软件画思维导图、项目框等等,图形化更加直观
画图工具在我们日常生活中随处可见,我们最常见的有Windows系统-画图,MAC系统的备忘录,那么我们来看一下,画图工具的构造吧
标题、每一栏描述语及形状等都是Label标签组件
空白面积最大的是Canvas画布组件
查看->显示状态是CheckbuttonF复选框组件
最后我们要退出或者小化放大窗口按钮是Button组件
我们可以看到,在画图工具中主要的作用就是在那空白的位置添加图片、画图等
本期,我们开始学习PythonTkinter标准组件Canvas画布相关属性和方法,Let'sgo~
1.Canvas概述Canvas(画布)是PythonTkinter标准组件,可放置图形、图相、组件等功能
Canvas特点
Canvas画布是一个矩形区域用来绘制
Canvas画布可以添加线性、圆形、图片
Canvas画布支持添加的组件位置、外观
Canvas画布也提供Button、Label其他组件
Canvas语法格式
Ca=Canvas(mater,options)2.Canvas相关属性属性含义anchor指定绘制文字、GUI组件的位置。该选项仅对create_text()、create_window()方法有效joinstyle指定直接连接点的风格。仅对绘制直线和多向形有效。该选项支持METTER、ROUND、BEVEL选项值。justify指定文字的对齐方式。该选项支持CENTER、LEFT、RIGHT常量值,该选项仅对create_text方法有效。arrowshape指定箭头形状。该选项是一个形如"202010"的字符串,字符串中的三个整数依次指定填充长度、箭头长度、箭头宽度。arrow指定绘制直线时两端是否有箭头。该选项支持NONE(两端无箭头)、FIRST(开始端有箭头)、LAST(结束端有箭头)、BOTH(两端都有箭头)选项值。extent指定绘制弧的角度。该选项仅对create_arc方法起作用。start指定绘制弧的起始角度。该选项仅对create_arc方法起作用。style指定绘制弧的样式。该选项仅对create_arc方法起作用。该选项支持PIESLICE(扇形)、CHORD(弓形)、ARC(仅绘制弧)选项值。stipple使用位图平铺进行填充。该选项可与fill选项结合使用,fill选项用于指定位图的颜色。dash指定边框使用虚线。该属性值既可为单独的整数,用于指定虚线中线段的长度;也可为形如(5,2,3)格式的元素,此时5指定虚线中线段的长度,2指定间隔长度,3指定虚线长度……依此类推。width指定边框宽度。如果不指定该选项,边框宽度默认为1outline指定边框颜色。fill指定填充颜色。如果不指定该选项,默认不填充。3.Canvas常用方法Canvas画布提供绘制图形方法
方法作用create_rectangle()绘制矩形create_oval()绘制椭圆(包括圆,圆是椭圆的特例)create_arc绘制弧create_bitmap绘制位图create_image绘制图片create_line()绘制直线create_polygon绘制多边形create_text绘制文字create_window绘制组件Canvas画布提供操作图形标签方法
方法作用addtag_aboove()为tagOrId对应图形项的上一个图形项添加新tagaddtag_all()为所有图形项添加新tagaddtag_below()为tagOrId对应图形项的下一个图形项添加新tagaddtag_closest()为和x、y点最接近的图形项添加新tagaddtag_enclosed()为指定矩形区域内最上面的图形项添加新tagdtag()删除指定图形项的taggettags()获取指定图形的所有Tagfind_withtag()获取tagOrId对应的所有图形项find_above()返回tagOrId对应图形项的上一个图形项find_all()返回全部图形项find_below()返回tagOrId对应图形项的下一个图形项find_closest()返回和x、y点最接近的图形项find_enclosed()返回位于指定矩形区域内最上面的图形项find_overlapping()返回与指定矩形区域重叠的最上面的图形项find_withtag()返回tagOrId对应的全部图形项Canvas画布提供操作图形方法
方法作用coords()重设图形项的大小和位置itemconfig()为tagOrId对应图形项配置选项move()移动画布上组件delete()删除画布上组件scale()缩放图形项dchars()删除文字图形项中间的部分文字?重要说明:
Canvas元素坐标是绘图的基础
点(0,0)位于Canvas组件的左上角
X轴水平向右延伸
Y轴垂直向下延伸
Canvas组件实操练习效果如下:
创建Canvas组件
self.Ca=Canvas(self,width=450,height=500)self.Ca.pack()Canvas组件提供create_polygon创建多边形图形
坐标(x1,y1,x2,y2,x3,y3)可以使用random.randint()来生成
可以多边绘制三角形
defdraw_pol(self):self.Ca.create_polygon((1*x1,y1*10,x2*1,y2*18,x3*10,y3*18),fill=rcolor)Canvas组件提供create_line()来绘制直线
坐标(x1,y1,x2,y2)可以使用random.randint()来生成
defdraw_line(self):self.Ca.create_line(x1,y1,x2,y2,fill=rcolor)Canvas组件提供create_oval()来绘制椭圆形
坐标(x1,y1,x2,y2)可以使用random.randint()来生成
椭圆坐标之间是有一定关系的
defdraw_oval(self):self.Ca.create_oval(x1,y1/2,x2*4,y2*4,fill=rcolor)Canvas组件提供create_rectangle()来绘制矩形
坐标(x1,y1,x2,y2)可以使用random.randint()来生成
可以使用属性来设置矩形的外观,比如dash属性矩形线条是虚线
defdraw_rect(self):self.Ca.create_rectangle(x1,y1,x2,y2,fill=rcolor,dash=(4,4))Canvas组件提供create_image()来添加图片
坐标(x1,y1)可以使用random.randint()来生成
要设置全局边Photo否则图片无法显示
defdraw_image(self):x1=random.randint(1,100)y1=random.randint(1,100)globalPhotoPhoto=PhotoImage(file="heart.gif")self.Ca.create_image(x1,y1,image=Photo)Canvas组件可以支持绑定鼠标事件,使用鼠标进行绘制任意图形
self.Ca.bind("<B1-Motion>",self.paint)以上图形绘制的颜色是随机产生的
defrandomcolor(self):colorlist=["1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]color=""foriinrange(6):color+=colorlist[random.randint(0,14)]return'#'+color颜色代码是以“#”开头的6位16进制代码
使用for循环进行random.randint()来随机产生每一位的代码
完整代码如下:
fromtkinterimport*importrandomimporttkinterclassApplication(Frame):def__init__(self,master=None):#super()代表的是父类的定义,而不是父类对象super().__init__(master)self.master=masterself.pack()self.createWidgetCanvas()defcreateWidgetCanvas(self):self.Ca=Canvas(self,width=450,height=500)self.Ca.pack()self.Ca.bind("<B1-Motion>",self.paint)Button(self,text="清空画布",width=10,command=(lambdax="all":self.Ca.delete(x))).pack(side="left")Button(self,text="画三角形",width=10,command=self.draw_pol).pack(side="left")Button(self,text="画椭圆",width=10,command=self.draw_oval).pack(side="left")Button(self,text="画直线",width=10,command=self.draw_line).pack(side="left")Button(self,text="画矩形",width=10,command=self.draw_rect).pack(side="left")Button(self,text="添加图片",width=10,command=self.draw_image).pack(side="left")defdraw_line(self):x1=random.randint(0,500)y1=random.randint(0,500)x2=random.randint(0,500)y2=random.randint(0,500)rcolor=self.randomcolor()self.Ca.create_line(x1,y1,x2,y2,fill=rcolor)defdraw_oval(self):x1=random.randint(0,100)y1=random.randint(0,100)x2=random.randint(0,100)y2=random.randint(0,100)rcolor=self.randomcolor()self.Ca.create_oval(x1,y1/2,x2*4,y2*4,fill=rcolor)defdraw_rect(self):x1=random.randint(5,500)y1=random.randint(5,500)x2=random.randint(5,500)y2=random.randint(5,500)rcolor=self.randomcolor()self.Ca.create_rectangle(x1,y1,x2,y2,fill=rcolor,dash=(4,4))defdraw_pol(self):x1=random.randint(1,100)y1=random.randint(1,40)x2=random.randint(1,100)y2=random.randint(1,30)x3=random.randint(1,40)y3=random.randint(1,30)rcolor=self.randomcolor()self.Ca.create_polygon((1*x1,y1*10,x2*1,y2*18,x3*10,y3*18),fill=rcolor)defdraw_image(self):x1=random.randint(1,100)y1=random.randint(1,100)globalPhotoPhoto=PhotoImage(file="heart.gif")self.Ca.create_image(x1,y1,image=Photo)defpaint(self,event):x1,y1=(event.x-1),(event.y-1)x2,y2=(event.x+1),(event.y+1)self.Ca.create_oval(x1,y1,x2,y2,fill="pink")defrandomcolor(self):colorlist=["1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]color=""foriinrange(6):color+=colorlist[random.randint(0,14)]return'#'+colorroot=Tk()root.geometry("300x130+200+300")root.title("MyfirstAPP")app=Application(master=root)root.mainloop()总结本期,我们学习PythonTkinter提供一个非常强大好玩的Canvas组件。我们使用Canvas组件可以精美的图形,增加我们程序的趣味性。
以上是本期内容,欢迎大佬们点赞评论指正,下次见~?(????`)比心??
作者:盆友圈的小可爱