在 tkinter 中的 Canvas 有十分强大的作图功能,然而,并没有一份比较好的文档对这些作图函数进行分组,极大地限制了函数的使用。本文将这些作图函数分为如下几组:
graph = {'create_arc', 'create_line', 'create_oval', 'create_rectangle', 'create_polygon'}
image = {'create_bitmap', 'create_image'}
text = {'create_text'}
window = {'create_window'}
下面逐一介绍这些函数之间的参数的区别与联系。
1 通用参数
1.1 通用:graph + image + text + window
graph + image + text + window 共同的参数有:
| 选项 | 含义 |
|---|---|
state |
指定该画布对象的状态。可以是 'normal'(默认值), 'disabled'(不可用,不响应事件)和 'hidden'(隐藏) |
tags |
为创建的画布对象添加标签 |
1.2 “width”:graph + text + window
graph、text 与 window 的共有参数是 "width",但是它们的含义有所区别:
| 选项 | 含义 |
|---|---|
| graph | 指定边框的宽度 |
| text | 如果指定该选项,则文本会在该宽度处自动断行;如果不指定该选项,文本对象的宽度等于文本最长行的长度 |
| window | 指定窗口组件的宽度 |
1.3 graph + text
graph 与 text 均有参数:activefill, activestipple, disabledfill, disabledstipple, offset, stipple。
activefill,activestipple分别表示当画布对象状态为'active'的时候,填充颜色、指定填充的位图disabledfill,disabledstipple分别表示当画布对象状态为'disabled'的时候,填充颜色、指定填充的位图
| 选项 | 含义 |
|---|---|
offset |
指定当点画模式时填充位图的偏移。该选项的值可以是:"x,y", "#x,y", 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'center' |
stipple |
指定一个位图用于填充。默认值是空字符串,表示实心 |
一个实例:
from tkinter import Tk, Canvas
# 创建窗口
root = Tk()
# 创建并添加Canvas
cv = Canvas(root, background='white')
cv.pack(fill='both', expand='yes')
cv.create_rectangle(30, 30, 200, 200,
outline='red', # 边框颜色
stipple = 'question', # 填充的位图
fill="red", # 填充颜色
width=5 # 边框宽度
)
cv.create_oval(240, 30, 330, 200,
outline='yellow', # 边框颜色
fill='pink', # 填充颜色
width=4 # 边框宽度
)
root.mainloop()
效果图如下:

1.4 image + text + window
| 选项 | 含义 |
|---|---|
| anchor | 指定位图在 position 参数的相对位置。'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' 或 'center'(默认值)来定位(ewsn 代表东西南北,其中上北下南左西右东) |
1.5 graph 通用
activedash,activewidth,activeoutline,activeoutlinestipple分别表示当画布对象状态为'active'的时候,绘制虚线、指定边框的宽度、绘制轮廓线、指定填充轮廓的位图。disableddash,disabledwidth,disabledoutline,disabledoutlinestipple分别表示当画布对象状态为'disabled'的时候,绘制虚线、指定边框的宽度、绘制轮廓线、指定填充轮廓的位图。
| 选项 | 含义 |
|---|---|
dash |
指定绘制虚线轮廓。该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔。例如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔 |
dashoffset |
指定虚线轮廓开始的偏移位置。例如当 dash=(5, 1, 2, 1),dashoffset=3,则从 2 开始画虚线 |
fill |
指定填充的颜色,空字符串表示透明 |
1.6 graph - {'create_line'}
| 选项 | 含义 |
|---|---|
| outline | 指定轮廓的颜色 |
1.7 {'create_polygon', create_line''}
调用:create_polygon(coords,**kw) 与 create_line(coords, **kw)
| 选项 | 含义 |
|---|---|
| joinstyle | 指定当绘制两个相邻线段之间接口的样式 。该选项的值可以是: -‘round’(以连接点为圆心,width/2 选项设置的长度为半径绘制圆角,默认值),‘bevel’(在连接点处对两线段的夹角平切), ‘miter’(沿着两线段的夹角延伸至一个点)。 |
| smooth | 该选项的值为 True 时,将绘制贝塞尔样条曲线代替线段。.默认值为 False |
| splinesteps | 当绘制贝塞尔样条曲线的时候,该选项指定由多少条折线来构成曲线。默认值是 12;只有当 smooth 选项为 True 时该选项才能生效 |
2 create_window(position, **kw)
在 position 指定的位置 (x,y)(x,y)(x,y) 创建一个窗口组件。创建成功后返回该窗口组件的 ID。
下方表格列举了 kw 选项的具体含义:
| 选项 | 含义 |
|---|---|
| height | 指定窗口组件的高度 |
| window | 指定一个窗口组件 |
3 create_image(position, **kw)
在 position 指定的位置 (x,y)(x,y)(x,y) 创建一个图片对象。创建成功后返回该图片对象的 ID。下方表格列举了各个 kw 选项的具体含义:
| 选项 | 含义 |
|---|---|
activeimage |
指定当图片对象状态为 'active' 时候显示的图片 |
disabledimage |
指定当图片对象状态为 'disabled' 时候显示的图片 |
image |
指定要显示的图片 |
4 create_bitmap(position, **kw)
在 position 指定的位置 (x,y)(x,y)(x,y) 创建一个位图对象。创建成功后返回该位图对象的 ID。
activebackground, activebitmap, activeforeground 分别指定当位图对象状态为 'active' 时候的背景颜色、填充的位图、前景颜色;disabledbackground, disabledbitmap, disabledforeground 分别指定当位图对象状态为 'disabled' 时候的背景颜色、填充的位图、前景颜色。
下方表格列举了各个 kw 其他选项的具体含义:
| 选项 | 含义 |
|---|---|
| background | 指定背景颜色,即在位图中值为 0 的点的颜色;空字符串表示透明 |
| foreground | 指定前景颜色,即在位图中值为 1 的点的颜色 |
| bitmap | 指定显示的位图 |
5 create_text(position,**kw)
在 position 指定的位置 (x,y)(x,y)(x,y) 创建一个文本对象。创建成功后返回该文本对象的 ID。
下方表格列举了各个 kw 选项的具体含义:
anchor 同 create_bitmap(position, **kw)。
| 选项 | 含义 |
|---|---|
| fill | 指定文本的颜色 |
| font | 指定文本的字体、尺寸等信息 |
| justify | 指定对于多行文本的对齐方式。该选项可以使用的值有:LEFT(默认)、CENTER 和 RIGHT |
| text | 指定该文本对象将要显示的文本内容 |
6 形态各异 graph
6.1 create_rectangle(bbox,**kw) 与 create_oval(bbox,**kw)傻傻分不清
create_oval(bbox,**kw) 与 create_rectangle(bbox,**kw) 分别用于创建矩形和椭圆。新创建的画布对象位于显示列表的顶端,创建成功后返回该画布对象的 ID。
6.2 create_arc(bbox, **kw)
根据 bbox 即 (x0,y0,x1,y1)(x_0,y_0, x_1, y_1)(x0,y0,x1,y1) 创建一个扇形(‘pieslice’)、弓形(‘chord’)或弧形(‘arc’)。新创建的画布对象位于显示列表的顶端,创建成功后返回该画布对象的 ID。下方表格列举了各个 kw 选项的具体含义:
| 选项 | 含义 |
|---|---|
| extent | 指定从 start 选项指定的位置开始到结束位置的角度(默认值是 90.0 ) |
| outlineoffset | 指定当点画模式绘制轮廓时位图的偏移。该选项的值可以是:"x,y", "#x,y", 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw', 'center' |
| outlinestipple | 当 outline 选项被设置时,该选项用于指定一个位图来填充边框。默认值是空字符串,表示黑色 start |
| style | 指定该方法创建的是扇形(‘pieslice’)(默认值)、弓形(‘chord’)或弧形(‘arc’)。 |
6.3 create_line(coords, **kw)
根据 coords 给定的坐标创建一条或多条线段。如果给定的坐标多于两个点,则会首尾相连变成一条折线,创建成功后返回该画布对象的 ID。
下方表格列举了各个 kw 选项的具体含义:
| 选项 | 含义 |
|---|---|
| arrow | 默认线段是不带箭头的,你可以通过设置该选项添加箭头到线段中。'first' 表示添加箭头到线段开始的位置;'last' 表示添加箭头到线段结束的位置;'both' 表示两端均添加箭头 |
| arrowshape | 用一个三元组 (a,b,c)(a,b,c)(a,b,c) 来指定箭头的形状。a,b,ca,b,ca,b,c 分别代表箭头的三条边的长;默认值是 (8, 10, 3) |
| capstyle | 指定线段两端的样式。该选项的值可以是:‘buff’( 默认值)(线段的两段平切于起点和终点)、‘projecting’(线段的两段在起点和终点的位置分别延长一半 width 选项设置的长度)与 ‘round’(线段的两段在起点和终点的位置分别延长一半 width 选项设置的长度并以圆角绘制) |
随时随地看视频