画布(Canvas)控件的方法

所有的画布对象都支持这些方法:

本文多次涉及显示列表(​​Display list​​),请参见展示列表。

.addtag_above(newTag, tagOrId)


将一个新标签附加到显示列表中由 tagOrId 指定的标签上方的对象。newTag 参数是您要附加的标签,一个字符串。

.addtag_all(newTag)


将给定的标签 newTag 附加到画布上的所有对象。

.addtag_below(newTag, tagOrId)


将一个新标签附加到显示列表中 tagOrId 指定的标签正下方的对象。 newTag 参数是一个标签字符串。

.addtag_closest(newTag, x, y, halo=None, start=None)


向最接近屏幕坐标 (x,y) 的对象添加标签。 如果在相同距离处有两个或更多对象,则选择显示列表中较高的一个。

使用 halo 参数来增加点的有效大小。 例如,值 5 会将 (x,y) 的 5 个像素内的任何对象视为重叠。

如果在 start 参数中传递了对象 ID,则此方法会标记显示列表中低于 start 的最高合格对象。

.addtag_enclosed(newTag, x1, y1, x2, y2)


将标签 newTag 添加到完全位于左上角为 (x1, y1) 且右下角为 (x2, y2) 的矩形内的所有对象。(对象必须完全在这个区域,才会受影响。)

.addtag_overlapping(newTag, x1, y1, x2, y2)


与前一种方法类似,但会影响与给定矩形至少共享一个点的所有对象。(只要对象有一部分在这个区域,就会受影响。)

.addtag_withtag(newTag, tagOrId)


将标签 newTag 添加到 tagOrId 指定的一个或多个对象。

.bbox(tagOrId=None)


返回一个元组 (x1, y1, x2, y2),描述一个包含 tagOrId 指定的所有对象的矩形。 如果省略该参数,则返回一个包含画布上所有对象的矩形。 矩形的左上角是 (x1, y1),右下角是 (x2, y2)。

.canvasx(screenx, gridspacing=None)


将窗口 x 坐标 screenx 转换为画布坐标。 如果提供了 gridspacing,则画布坐标将四舍五入为该值的最接近倍数。

.canvasy(screeny, gridspacing=None)


将窗口 y 坐标 screeny 转换为画布坐标。 如果提供了 gridspacing,则画布坐标将四舍五入为该值的最接近倍数。

.coords(tagOrId, x0, y0, x1, y1, ..., xn, yn)


如果仅传递 tagOrId 参数,则返回由该参数指定的最低或唯一对象的坐标元组。 坐标的数量取决于对象的类型。 在大多数情况下,它将是一个描述对象边界框的 4 元组 (x1, y1, x2, y2)。

您可以通过传入新坐标来移动对象。

.dchars(tagOrId, first=0, last=first)


从一个或多个文本项中删除字符。 删除 first 和 last 之间的字符,其中这些值可以是整数索引或字符串 'end' 表示文本的结尾。 例如,对于画布 C 和 对象I ,C.dchars(I, 1, 1) 将删除第二个字符。

.delete(tagOrId)


删除由 tagOrId 选择的一个或多个对象。 如果没有与 tagOrId 匹配的项目,则不会被视为错误。

.dtag(tagOrId, tagToDelete)


从 tagOrId 指定的一个或多个对象中移除 tagToDelete 指定的标签。

.find_above(tagOrId)


返回由 tagOrId 指定的对象正上方的对象的 ID 号。 如果多个对象匹配,您将获得最高的一个。 如果您将最高对象的对象 ID 传递给它,则返回一个空元组。

.find_all()


返回画布上所有对象的对象 ID 编号列表,从最低到最高。

.find_below(tagOrId)


返回由 tagOrId 指定的对象的对象 ID。 如果多个对象匹配,您将获得最低的一个。 如果您将最低对象的对象 ID 传递给它,则返回一个空元组。

.find_closest(x, y, halo=None, start=None)


返回一个包含最接近点 (x, y) 的对象的对象 ID 的单例元组。 如果没有符合条件的对象,则返回一个空元组。

使用 halo 参数来增加点的有效大小。 例如,halo=5 将 (x, y) 的 5 个像素内的任何对象视为重叠。

如果对象 ID 作为 start 参数传递,则此方法返回显示列表中低于 start 的最高合格对象。

.find_enclosed(x1, y1, x2, y2)


返回完全出现在左上角为 (x1, y1) 右下角为 (x2, y2) 的矩形内的所有对象的对象 ID 列表。

.find_overlapping(x1, y1, x2, y2)


与前一种方法类似,但返回与给定矩形至少共享一个点的所有对象的对象 ID 列表。

.find_withtag(tagOrId)


返回由 tagOrId 指定的一个或多个对象的对象 ID 列表。

.focus(tagOrId=None)


将焦点移动到 tagOrId 指定的对象。 如果有多个这样的对象,将焦点移到显示列表中允许插入光标的第一个。 如果没有符合条件的项目,或者画布没有焦点,则焦点不会移动。

如果省略参数,则返回具有焦点的对象的 ID,如果没有,则返回 ​​''​​。

.gettags(tagOrId)


如果 tagOrId 是对象 ID,则返回与该对象关联的所有标签的列表。 如果参数是标签,则返回具有该标签的最低对象的所有标签

.icursor(tagOrId, index)


假设所选项目允许文本插入并具有焦点,将插入光标设置为 index,它可以是整数索引或字符串 'end'。 其他没有影响

.index(tagOrId, specifier)


返回由 tagOrId 指定的文本项中给定说明符的整数索引(如果 tagOrId 指定多个对象,则是最低的一个)。返回值是作为整数的相应位置,按照通常的 Python 约定,其中 0 是第一个字符之前的位置。

说明符参数可以是以下任何一项:

tk.INSERT,返回插入光标的当前位置。

tk.END,返回项目最后一个字符后的位置。

tk.SEL_FIRST,返回当前文本选择的开始位置。如果文本项当前不包含文本选择,Tkinter 将引发 tk.TclError 异常。

tk.SEL_LAST,返回当前文本选择结束后的位置,或者如果项目当前不包含选择,则引发 tk.TclError。

“@x,y”形式的字符串,返回包含画布坐标 (x, y) 的字符的字符。如果这些坐标位于文本项的上方或左侧,则该方法返回 0;如果坐标位于项目的右侧或下方,则该方法返回项目末尾的索引。

.insert(tagOrId, specifier, text)


将给定的字符串插入到 tagOrId 指定的一个或多个对象中,在 specifier 参数给定的位置。

说明符值可能是:

任何关键字 tk.INSERT、tk.END、tk.SEL_FIRST 或 tk.SEL_LAST。 这些代码的解释请参考上面索引方法的说明。

所需插入的位置,使用字符串中位置的正常 Python 约定。

.itemcget(tagOrId, option)


返回所选对象中给定配置选项的值(如果 tagOrId 指定了多个,则返回最低对象)。 这类似于 Tkinter 对象的 .cget() 方法。

.itemconfigure(tagOrId, option, ...)


如果没有提供选项参数,则返回一个字典,其键是 tagOrId 指定的对象的选项(最低的一个,如果 tagOrId 指定了多个对象)。

要更改指定项的配置选项,请提供一个或多个格式为 option=value 的关键字参数。

.move(tagOrId, xAmount, yAmount)


通过将 xAmount 添加到它们的 x 坐标并将 yAmount 添加到它们的 y 坐标来移动 tagOrId 指定的项目。

.postscript(option, ...)


生成画布当前内容的封装 PostScript 表示。 选项包括:

参数

描述

colormode

使用 'color' 进行彩色输出,使用 'gray' 进行灰度输出,或使用 'mono' 进行黑白输出。

file

如果提供,则命名将写入 PostScript 的文件。 如果未给出此选项,则 PostScript 将作为字符串返回。

height

要打印的画布 Y 尺寸的多少。 默认是画布的整个可见高度。

rotate

如果为 false,页面将以纵向呈现; 如果是真的,在风景中。

x

要打印的区域的最左侧画布坐标。

y

要打印的区域的最顶部画布坐标。

width

要打印的画布 X 尺寸的多少。 默认是画布的可见宽度。

.scale(tagOrId, xOffset, yOffset, xScale, yScale)


根据它们与点 P=(xOffset, yOffset) 的距离缩放所有对象。 比例因子 xScale 和 yScale 基于值 1.0,这意味着没有缩放。 移动由 tagOrId 选择的对象中的每个点,使其与 P 的 x 距离乘以 xScale,其 y 距离乘以 yScale。

此方法不会更改文本项的大小,但可能会移动它。

.scan_dragto(x, y, gain=10.0)


请参阅下面的 .scan_mark() 方法。

.scan_mark(x, y)


该方法用于实现画布的快速滚动。 目的是用户将按住鼠标按钮,然后向上移动鼠标以在该方向上水平和垂直扫描(滚动)画布,其速度取决于自按下鼠标按钮后鼠标移动了多远 .

要实现此功能,请将鼠标的按钮按下事件绑定到调用 scan_mark(x, y) 的处理程序,其中 x 和 y 是当前鼠标坐标。 将 事件绑定到一个处理程序,假设鼠标按钮仍然按下,则调用 scan_dragto(x, y, gain) 其中 x 和 y 是当前鼠标坐标。

增益参数控制扫描速率。 此参数的默认值为 10.0。 使用更大的数字以加快扫描速度。

.select_adjust(oid, specifier)


在对象 ID 为 oid 的文本项中,调整当前文本选择的边界以包括说明符参数给定的位置。

当前选择锚点也设置到指定位置。 有关选择锚点的讨论,请参阅下面的画布 select_from 方法。

关于说明符的值,请参见上面的画布插入方法。

.select_clear()


删除当前文本选择(如果已设置)。 如果没有当前选择,则不执行任何操作。

.select_from(oid, specifier)


此方法将选择锚点设置为说明符参数给定的位置,在其对象 ID 由 oid 给出的文本项中。

给定画布上当前选定的文本由三个位置指定:开始位置、结束位置和选择锚点,可以在这两个位置内的任何位置。

要更改当前选定文本的位置,请将此方法与 select_adjust、select_from 和 select_to 画布方法 (q.v.) 结合使用。

.select_item()


如果此画布上有当前文本选择,则返回包含该选择的文本项的对象 ID。 如果没有当前选择,则此方法返回 None。

.select_to(oid, specifier)


此方法更改当前文本选择,使其包括选择锚点和说明符在文本项中指定的位置,文本项的对象 ID 由 oid 给出。 关于说明符的值,请参见上面的画布插入方法。

.tag_bind(tagOrId, sequence=None, function=None, add=None)


将事件绑定到画布上的对象。 对于 tagOrId 选择的一个或多个对象,将处理函数与事件序列相关联。 如果 add 参数是一个以“+”开头的字符串,则新绑定将添加到给定序列的现有绑定中,否则新绑定将替换给定序列的绑定。

有关事件绑定的一般信息,请参阅“事件”。

请注意,在调用 tag_bind 方法时,绑定应用于具有此标记的项目。 如果稍后从这些项目中删除标签,则绑定将保留在这些项目上。 如果您指定的标签稍后应用于调用 tag_bind 时没有该标签的项目,则该绑定将不会应用于新标记的项目。

.tag_lower(tagOrId, belowThis)


将显示列表中由 tagOrId 选择的一个或多个对象移动到由下面的标签或 ID 指定的第一个或唯一一个对象正下方的位置。

如果有多个带有标签 tagOrId 的项目,则保留它们的相对堆叠顺序。

此方法不影响画布窗口项。 要更改窗口项目的堆叠顺序,请在窗口上使用降低或提升方法。

.tag_raise(tagOrId, aboveThis)


将显示列表中由 tagOrId 选择的一个或多个对象移动到由上面的标签或 ID 指定的第一个或唯一一个对象正上方的位置。

如果有多个带有标签 tagOrId 的项目,则保留它们的相对堆叠顺序。

此方法不影响画布窗口项。 要更改窗口项目的堆叠顺序,请在窗口上使用降低或提升方法。

.tag_unbind(tagOrId, sequence, funcId=None)


从由 tagOrId 指定的画布对象或对象中移除处理程序 funcId 和事件序列的绑定。 请参见“事件”。

.type(tagOrId)


返回由 tagOrId 指定的第一个或唯一对象的类型。 返回值将是字符串“arc”、“bitmap”、“image”、“line”、“oval”、“polygon”、“rectangle”、“text”或“window”之一。

.xview(tk.MOVETO, fraction)


此方法相对于其图像滚动画布,旨在绑定到相关滚动条的命令选项。 画布水平滚动到偏移指定的位置,其中 0.0 将画布移动到最左边的位置,1.0 移动到最右边的位置。

.xview(tk.SCROLL, n, what)


此方法向左或向右移动画布:what 参数指定移动多少,可以是 tk.UNITS 或 tk.PAGES,n 表示相对于其图像向右移动画布多少个单位(或向左, 如果为负)。

tk.UNITS 移动的大小由画布的 xscrollincrement 选项的值给出; 请参阅“滚动条小部件”。

对于 tk.PAGES 的动作,n 乘以画布宽度的十分之九。

.xview_moveto(fraction)


此方法以与 .xview(tk.MOVETO, fraction) 相同的方式滚动画布。

.xview_scroll(n, what)


与 .xview(tk.SCROLL, n, what) 相同。

.yview(tk.MOVETO, fraction)


.xview(tk.MOVETO,...) 的垂直滚动等效项。

.yview(tk.SCROLL, n, what)


.xview(tk.SCROLL,...) 的垂直滚动等效项。

.yview_moveto(fraction)


.xview() 的垂直滚动等效项。

.yview_scroll(n, what)


.xview()、.xview_moveto() 和 .xview_scroll() 的垂直滚动等效项。