tkinter 画布(Canvas)控件的方法

69 阅读10分钟

将一个新标签附加到显示列表中 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”之一。