18.2 方法
方法 | 描述 |
---|---|
addtag(*args) | 内部函数,用于添加各种添加tag的处理。 |
addtag_above(newtag,tagOrId) | 在tagOrId指定的对象的上面对象添加tag。 |
addtag_all(newtag) | 给画布控件内的所有对象添加一个标签 |
addtag_below(newtag, tagOrId) | 在tagOrId指定的对象的下一个对象添加tag |
addtag_closest(newtag, x, y, halo=None, start=None) | 给最靠近坐标(x,y)的对象添加标签 |
addtag_enclosed(newtag, x1, y1, x2, y2) | 给在[x1,y1,x2,y2]定义的矩形范围内的所有对象添加标签 |
addtag_overlapping(newtag, x1, y1, x2, y2) | 为newtag参数添加标签。newtag可以是对象,也可以是标签 |
addtag_withtag(newtag, tagOrId) | 为tagOrId参数添加标签 |
bbox(*args) | 返回包含指定对象的矩形范围 |
tag_unbind(tagOrId, sequence, funcid=None) | 解除与 tagOrId绑定的事件 |
tag_bind(tagOrId, sequence=None, func=None, add=None) | 为 Canvas 控件上的对象绑定方法。 |
canvasx(screenx, gridspacing=None) | 将窗口坐标系的 X 坐标转化为画布坐标系 |
canvasy(screeny, gridspacing=None) | 将窗口坐标系的 Y 坐标转化为画布坐标系 |
config(**options) | 修改一个或者多个画布控件的属性值 |
coords(*args) | 返回指定对象的坐标与大小或者修改指定对象的坐标与大小 |
create_arc(*args, **kw) | 在定义的矩形范围内,创建一个弧形(ARC)、扇形(PIESLICE)或弓形(CHORD)。 |
create_bitmap(position, **options) | 在画布的指定位置创建一个位图。 |
create_image(position, **options) | 在画布的指定位置创建一个图片对象。 |
create_line(coords, **options) | 根据 coords 给定的坐标,在画布上创建一条或多条线段。 |
create_oval(bbox, **options) | 根据限定矩形 bbox 在画布上创建一个椭圆。 |
create_polygon(coords, **options) | 根据 coords 给定的坐标,在画布上绘制一个多边形。 |
create_rectangle(bbox, **options) | 根据限定矩形 bbox,在画布上创建一个矩形。 |
create_text(position, **options) | 在 position 指定的位置(x, y)创建一个文本对象 |
create_window(position, **options) | 在 position 指定的位置(x, y)创建一个窗口组件 |
dchars(*args) | 删除字符 |
delete(*args) | 删除指定对象 |
dtag(*args) | 删除tag |
find_above(tagOrId) | 返回在 tagOrId参数指定的对象之上的 ID。 |
find_all() | 返回 Canvas 控件上所有的对象。 |
find_below(tagOrId) | 返回在 tagOrId参数指定的对象之下的 ID。 |
find_closest(x, y, halo=None, start=None) | 返回一个元组,该元组包含最靠近坐标(x, y)的对象的ID。 |
find_enclosed(x1, y1, x2, y2) | 返回完全包含在限定矩形内所有对象的 ID。 |
find_overlapping(x1, y1, x2, y2) | 返回所有与限定矩形有交叉或重叠的对象的 ID |
find_withtag(tagOrId) | 返回 tagOrId指定的所有对象的 ID |
focus(*args) | 将焦点移动到指定的 *args第一个参数指定的对象 |
gettags(*args) | 返回与 *args第一个参数相关联的所有 tags。 |
icursor(*args) | 将光标移动到 tagOrId指定的对象 |
index(*args) | 返回参数index 在指定 tagOrId中的位置 |
insert(*args) | 在允许进行文本编辑的对象的指定位置插入文本。 |
itemcget(tagOrId, option) | 获得指定 tagOrId的选项的当前值 |
itemconfigure(tagOrId, cnf=None, **kw) | 修改指定 tagOrId的选项的当前值 |
tag_lower(*args) | 将一个或多个对象移至底部或者某一指定对象的下面。 |
move(*args) | 将 tagOrId对象移动到新位置 |
postscript(cnf={}, **kw) | 将 Canvas 的当前内容封装成 PostScript格式表示 |
tag_raise(*args) | 将一个或多个对象移至顶部。 |
scale(*args) | 缩放 tagOrId指定的对象 |
scan_dragto(x,y,gain=10) | 实现 Canvas 内容的滚动 |
scan_mark(x,y) | 实现 Canvas 内容的滚动 |
select_adjust(tagOrId, index) | 调整文本对象的选中范围,使得给定的 index 参数指定的位置在范围内。 |
select_clear() | 取消 Canvas 控件中所有选中的文本对象 |
select_from(tagOrId, index) | 设定文本对象选中范围的起始位置为 index 参数指定的位置。 |
select_item() | 返回在Canvas 控件中有文本被选中的对象ID。 |
select_to(tagOrId, index) | 设定文本对象选中范围的结束位置为 index 参数指定的位置。 |
type(tagOrId) | 返回指定对象的类型。 |
18.2.1 addtag( *args) | |
addtag()是内部函数,用于处理各种添加tag的方法。标签(tag)可以看作是对象的别名,在程序中可以直接使用标签来设置相应对象的属性。不过,不同的对象可以有相同的标签,就好比有多个人的小名叫小明一样。另外,同一个对象也可以有多个标签,就好比很多人有多个外号一样。调用addtag一般使用的参数包括: | |
(1)tag:标签的名字 | |
(2)method: 如何添加标签。可以选择的方法有:“above”, “all”, “below”, “closest”, “enclosed”, “overlapping” or “withtag”。 | |
(3)*args:tag的属性参数。 |
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b2=b1.create_arc(50,50,200,200,width=5)
b1.addtag('tag1','all')
b1.pack()
root.mainloop()
18.2.2 addtag_above(newtag, tagOrId)
在画布控件中,添加的对象是使用堆栈的方式存放于管理的。也就是说,后创建的对象在最上面。addtag_above函数,就是给在指定对象的上面的对象添加标签。
比如,创建了一个矩形对象R,然后在创建一个直线对象L,调用addtag_above(‘Line’,R)的作用,就是给直线对象L,添加了一个标签’Line’。
(1)newtag:标签的名字
(2)tagOrId:可以是参考对象,也可以是标签。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b2=b1.create_rectangle(20,40,250,100,width=3)
b3=b1.create_line(50,150,200,200,width=5)
b1.addtag_above('line',b2)
b1.pack()
print(b1.gettags(b3))
root.mainloop()
结果:
('line',)
注:该方法相当于 addtag(tag, “above”, item)
18.2.3 addtag_all(newtag)
给画布控件内的所有对象添加一个标签。
(1)newtag:标签名字
注:该方法相当于 addtag(tag, “all”)
18.2.4 addtag_below(newtag, tagOrId)
类似于addtag_above。不过是给指定对象的堆栈下面一个对象添加标签。
注:该方法相当于 addtag(tag, “below”, tagOrId)
18.2.5 addtag_closest(newtag, x, y, halo=None, start=None)
给最靠近坐标(x,y)的对象添加标签。这个功能只要在画布控件上有对象存在,就会成功。坐标的参照点是画布控件,而不是屏幕坐标或者窗口坐标。
(1)newtag:标签名字
(2)x:水平坐标
(3)y: 垂直坐标
(4)halo: 设定一个距离,在以(x, y)为中心,该距离内的所有画布对象均添加标签。
(5)start:指定一个对象,为低于但最接近该对象的画布对象添加标签
注:如果果同时由几个对象与给定坐标(x, y)的距离相同,则为位于显示列表上方的那个画布对象添加标签
18.2.6 addtag_enclosed(newtag, x1, y1, x2, y2)
给在[x1,y1,x2,y2]定义的矩形范围内的所有对象添加标签。对象必须完全在[x1,y1,x2,y2]定义的矩形范围内,如果只是部分在该矩形范围内,则不会添加标签。有重叠的部分也不会添加标签。
注: 该方法相当于 addtag(tag, “enclosed”, x1, y1, x2,y2)
(1)newtag:标签名字。
(2)x1,y1,x2,y2:矩形的坐标。(x1,y1)是左上点,(x2,y2)是右下点。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b2=b1.create_rectangle(20,40,250,100,width=3)
b3=b1.create_line(50,150,200,200,width=5)
b1.addtag_above('line',b2)
b1.addtag_enclosed('notin',10,30,300,190)
b1.create_rectangle(20,30,300,190,width=3,dash=True)
b1.pack()
print('矩形完全位于范围内:',b1.gettags(b2))
print('线段部分位于矩形范围内:',b1.gettags(b3))
root.mainloop()
结果:
矩形完全位于范围内: ('notin',)
线段部分位于矩形范围内: ('line',)
18.2.7 addtag_overlapping(newtag, x1, y1, x2, y2)
给跟[x1,y1,x2,y2]定义的矩形有交叉或重叠的所有对象添加标签。该方法比addtag_enclosed范围更广。区别就是只要和矩形[x1,y1,x2,y2]有交叉就可以,而不是必须完全在该矩形范围内。
(1)newtag:标签名字。
(2)x1,y1,x2,y2:矩形的坐标。(x1,y1)是左上点,(x2,y2)是右下点。
注: 该方法相当于 addtag(tag, “overlapping”, x1, y1,x2, y2)
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b2=b1.create_rectangle(20,40,250,100,width=3)
b3=b1.create_line(50,150,200,200,width=5)
b1.addtag_above('line',b2)
b1.addtag_overlapping('overlapping',10,30,300,190)
b1.create_rectangle(20,30,300,190,width=3,dash=True)
b1.pack()
print('矩形完全位于范围内:',b1.gettags(b2))
print('线段部分位于矩形范围内:\n',b1.gettags(b3))
root.mainloop()
结果:
矩形完全位于范围内: ('overlapping',)
线段部分位于矩形范围内:
('line', 'overlapping')
说明:可以看见只有部分位于矩形内部的线段这个时候也添加了标签。
18.2.8 addtag_withtag(newtag, tagOrId)
为tagOrId参数添加标签。tagOrId可以是对象,也可以是标签。
(1)newtag:新的标签
(2)tagOrId:可以是对象,也可以标签。
18.2.9 bbox(args)
返回一个能够包括args指定的所有对象所在的矩形。这个矩形是包含所有的对象或者tag的。返回的矩形边界值,可能会有几个像素的误差。
(1)*args: 指定对象
(2)返回值: 一个四元组,定义了一个矩形区域。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b2=b1.create_line(20,40,250,100,width=3)
b3=b1.create_rectangle(10,100,300,200)
b1.pack()
print(b1.bbox(b2,b3))
root.mainloop()
结果:
(9, 36, 301, 201)
18.2.10 canvasx(screenx, gridspacing=None)
将窗口坐标系的 X 坐标转化为画布坐标系
(1)screenx:窗口x坐标
(2)gridspacing:返回值将为该参数的整数倍
(3)返回值:画布坐标系数值
18.2.11 canvasy(screeny, gridspacing=None)
将窗口坐标系的 Y 坐标转化为画布坐标系
(1)screeny:窗口y坐标
(2)gridspacing:返回值将为该参数的整数倍
(3)返回值:画布坐标系数值
18.2.12 config(**options)
修改一个或者多个画布控件的属性值。如果没有给定属性值,会返回一个包含目前所有属性值的数据字典。属性值说明,见表格 18.1中的属性表格。
18.2.13 coords(*args)
返回指定对象的坐标与大小或者修改指定对象的坐标与大小。
(1)tagOrId:第一个参数是指定的对象或者标签。
(2)coords:一组四元组坐标列表,会用这些坐标取代匹配的对象的坐标。也就是tagOrId指定的对象会改变大小和位置。
(3)如果没有给定coords参数,返回值是tagOrId指定对象的四元组。