Python tkinter -- 18장 캔버스 제어 방법(1)

18.2 방법

방법 설명하다
추가태그(*인수) 다양한 태그 처리를 추가하는 데 사용되는 내부 기능.
addtag_above(newtag,tagOrId) tagOrId로 지정된 객체 위의 객체에 태그를 추가합니다.
addtag_all(새 태그) 캔버스 컨트롤의 모든 개체에 레이블 추가
addtag_below(newtag, tagOrId) tagOrId로 지정된 개체의 다음 개체에 태그를 추가합니다.
addtag_closest(newtag, x, y, 후광=없음, 시작=없음) 좌표(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(*인수) 지정된 객체를 포함하는 경계 사각형을 반환합니다.
tag_unbind(tagOrId, 시퀀스, funcid=없음) tagOrId에서 이벤트 결합 해제
tag_bind(tagOrId, 시퀀스=없음, func=없음, 추가=없음) Canvas 컨트롤의 개체에 대한 메서드를 바인딩합니다.
canvasx(screenx, gridspacing=없음) 윈도우 좌표계의 X좌표를 캔버스 좌표계로 변환
canvasy(스크린, 그리드 간격=없음) 창 좌표계의 Y 좌표를 캔버스 좌표계로 변환
구성(**옵션) 하나 이상의 캔버스 컨트롤의 속성 값 수정
좌표(*args) 지정된 객체의 좌표와 크기를 반환하거나 지정된 객체의 좌표와 크기를 수정합니다.
create_arc(*args, **kw) 정의된 직사각형 내에 호(ARC), 팬(PIESLICE) 또는 보우(CHORD)를 생성합니다.
create_bitmap(위치, **옵션) 캔버스의 지정된 위치에 비트맵을 만듭니다.
create_image(위치, **옵션) 캔버스의 지정된 위치에 그림 개체를 만듭니다.
create_line(좌표, **옵션) 좌표로 지정된 좌표에서 캔버스에 하나 이상의 선분을 만듭니다.
create_oval(bbox, **옵션) 경계 사각형 bbox를 기반으로 캔버스에 타원을 만듭니다.
create_polygon(좌표, **옵션) coords로 주어진 좌표에서 캔버스에 다각형을 그립니다.
create_rectangle(bbox, **옵션) 경계 사각형 bbox에 따라 캔버스에 사각형을 만듭니다.
create_text(위치, **옵션) position으로 지정된 위치(x, y)에 텍스트 객체를 생성합니다.
create_window(위치, **옵션) position으로 지정된 위치(x, y)에 위젯을 만듭니다.
dchars(*인수) 문자 삭제
삭제(*인수) 지정된 개체 삭제
dtag(*인수) 태그 삭제
find_above(tagOrId) tagOrId 매개변수로 지정된 개체 위의 ID를 반환합니다.
find_all() Canvas 컨트롤의 모든 개체를 반환합니다.
find_below(태그OrId) tagOrId 매개변수로 지정된 개체 아래의 ID를 반환합니다.
find_closest(x, y, 후광=없음, 시작=없음) 좌표(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指定对象的四元组。

추천

출처blog.csdn.net/weixin_42272768/article/details/100811778