Canvas类似于一个画板,可以在上面绘制各种图形和进行图形编辑,Canvas的坐标系不同于turtle的坐标系,它是以canvas的左上角点为原点(0,0),以右方和下方为x轴正轴和y轴正轴,并以像素为单位;下面介绍几个常用的绘制函数:
create_rectange(x1,y1,x2,y2):绘制一个矩形,(x1,y1)为矩形左上角点,(x2,y2)为矩形右下角点;
create_oval(x1,y1,x2,y2):绘制一个椭圆,(x1,y1)和(x2,y2)分别为椭圆外接矩形的左上角点和右下角点;
create_arc(x1,y1,x2,y2,start,extent):绘制一个弧形, (x1,y1)和(x2,y2)分别为椭圆或圆外接矩形的左上角点和右下角点,start是弧形角度开始点,extent是弧形角度;
create_polygon(x1,y1,x2,y2,x3,y3):绘制一个多边形,(xi,yi)分别为各顶点坐标;
create_line(x1,y1,x2,y2):绘制线条,(x1,y1)和(x2,y2)分别为起始点和结束点;
create_text(x,y,text):绘制字符串在以(x,y)为中心的位置。
下面举个小例子说明用法:
window = Tk() canvas = Canvas(window,width=200,height=100,bg="white") canvas.pack() canvas.create_rectangle(10,10,190,90,tags="rect") #canvas.create_oval(10,10,190,90,fill="red",tags="oval") #canvas.create_arc(10,10,190,90,start=0,extent=90,width=8,fill="red",tags="arc") #canvas.create_polygon(10,10,190,90,30,50,tags="poly") #canvas.create_line(10,90,190,10,width=9,arrow="last",activefill="blue",tags="line") #canvas.create_text(60,40,text="string",font="Times 10 bold underline",tags="string") #canvas.delete("rect","oval","arc","poly","line","string") window.mainloop() 对其中出现的一些字段做简要说明:create_rectangle()中的tags表示的是这个图形在canvas中的标识,在后面的canvas.delete()(删除canvas中的图形)中也使用到;create_oval()中的fill表示的是填充颜色;create_arc()中的width表示的是图形线段的宽度;create_line中的arrow="last"表示在线段末尾加箭头,active fill表示若鼠标移动到这条线段上时,线段的颜色会变成蓝色;create_text()中的font是字体。
4. Geometry Managers
Tkinter利用Geometry Managers在容器中布置控件,有三种Geometry managers:grid,pack,place。其中前两种在之前使用过。每一种管理方式都不同,所以通常不在一个容器中混合使用这三种方式,而是利用Frame子容器来分开使用geometry managers。
1)grid
grid的通常表示方式是:widgets.grid(row=a, column=b, rowspan=c, columnspan=d, padx=e, pady=f, sticky=E)。其中前两个参数已经用过,rowspan和columnspan表示控件跨几行几列;padx和pady表示与容器的水平边线和垂直边线间隔多少像素值;sticky表示在容器内容的什么方位,有E,S,N,W,SE,SW,NW,NE几种。具体可测试。
2)pack
上面的例子,默认pack的方式是一行一行进行的。pack中可以用side来设置放置的方式,有LEFT, RIGHT, TOP, BOTTOM,默认的方式就是TOP,如widget.pack(side=LEFT)。
3)place
place可以在任何位置放置控件,用法为widgets.place(x=a,y=b),a,b分别为坐标。值得注意的是,place manager并不兼容所有的计算机,如果windows的分辨率为1024*768,那么place正好可用,若分辨率过高或过低,都会出现显示问题。
5. 使用图片
可以用photo = PhotoImage(file = imagefilename)来加载图片。然后在控件的创建中使用图片。如
testImage = PhotoImage(file = "testimage.gif") Label(window,image=testImage) canvas.create_image(90,50,image=testImage) Button(window,image=testImage)这一节暂时学习这么多,后面的Menu, Mouse, Key Events, Scrollbars, Animation, Dialog等后续再学习。