Python tkinter -- 第18章 画布控件属性(2)

*18.2.23 dchars(args)
*args传递的参数有3个:
(1)tagOrId:对象ID或者标签tag
(2)from:开始的字符位置
(3)to:可选项,结束的字符位置。
dchars的作用就是从tagOrId指定对象中,删除字符。删除从from指定的位置开始,到to指定的位置结束。如果to没有指定,则只删除一个字符。

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_text(120,20)
b1.insert(t,tk.INSERT,'新年快乐')
def delete():
    b1.dchars(t,0)
b2=tk.Button(root,text='Delete',command=delete)
b2.pack()
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
*18.2.24 delete(args)
*args传递的参数只有一个:
(1)tagOrId:表示对象ID或者tag(标签)
delete的作用是删除tagOrId指定的对象。对象可以是ID,也可以是标签tag。如果指定的对象不存在,也不会产生错误。

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_text(120,20,text='新年快乐')
def delete():
    b1.delete(t)
b2=tk.Button(root,text='Delete',command=delete)
b2.pack()
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
说明:点击’Delete’按钮之后,’新年快乐’对象会被删除。
*18.2.25 dtag(args)
*args可以有两个参数:
(1)tagOrId:对象ID或者标签tag。
(2)tagDelete:指定要删除的tag。如果没有设置此参数,表示删除tagOrId指定对象的所有tag。
dtag()的作用是从tagOrId指定的对象中删除指定的标签tag。如果tagOrId指定的对象不存在或者tagDelete不存在,并不会产生错误。

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_text(120,20,text='新年快乐',tag='txt')
def dtag():
    b1.dtag(t,'txt')
    print(b1.gettags(t))
b2=tk.Button(root,text='Dtag',command=dtag)
b2.pack()
b1.pack()
print(b1.gettags(t))
root.mainloop()

说明:tag(标签)的信息可以通过gettags()方法获取。
18.2.26 find_above(tagOrId)
返回在 tagOrId参数指定的对象之上的 ID。如果tagOrId是最顶端的对象,那么返回一个空元组。如果有多个对象符合要求,会返回最顶端的那个对象。tagOrId可以是对象ID,也可以是tag。
(1)tagOrId: 指定对象ID或者标签tag。

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_text(120,20,text='新年快乐',tag='txt')
t2=b1.create_text(220,20,text='新年快乐2',tag='txt2')
def find_above():
    tag=b1.find_above(t)
    print(tag)
b2=tk.Button(root,text='Find Above',command=find_above)
b2.pack()
b1.pack()
root.mainloop()
结果:
(2,)

说明:t2的值是2,所以返回的元组是(2,)
18.2.27 find_all()
返回 Canvas 控件上所有的对象。返回的格式是一个包括所有对象ID的元组。最顶端的对象在元组的最后一个。
18.2.28 find_below(tagOrId)
返回在 tagOrId参数指定的对象之下的 ID。如果tagOrId是最底层的对象,那么返回一个空元组。如果有多个对象符合要求,会返回最顶端的那个对象。tagOrId可以是对象ID,也可以是tag(标签)。
(1)tagOrId: 指定对象ID或者标签tag。
18.2.29 find_closest(x, y, halo=None, start=None)
返回一个元组,该元组包含最靠近坐标(x, y)的对象的ID。如果没有符合条件的对象,返回的是一个空的元组。可选参数halo设定一个距离,以(x, y)为中心,该距离内的所有画布对象均选中。可选参数start指定一个对象,该方法只返回在显示列表中低于但是最接近start指定对象的一个ID。
(1)x:水平坐标
(2)y: 垂直坐标
(3)halo: 设定一个距离,在以(x, y)为中心,该距离内的所有对象均选中。
(4)start:指定一个对象obj,位于显示列表中低于obj对象但是最靠近的对象被选中。
注:如果在没有指定halo和start参数的情况下,同时有多个对象符合条件,则为位于显示列表上方的那个对象被选中。
18.2.30 find_enclosed(x1, y1, x2, y2)
返回完全包含在限定矩形内所有对象的 ID。返回的对象一定是完全位于矩形范围内的,如果一个对象只是部分位于矩形范围内,则不会被选中。
(1)[x1,y1,x2,y2]:为限定矩形坐标。
18.2.31 find_overlapping(x1, y1, x2, y2)
返回所有与限定矩形有交叉或重叠的对象的 ID(当然也包含在限定矩形内的对象)。与find_enclosed的区别就是部分位于矩形范围内的对象也会被选中。
(1)[x1,y1,x2,y2]:为限定矩形坐标。
18.2.32 find_withtag(tagOrId)
返回 tagOrId指定的所有对象的 ID。tagOrId可以是单个对象的 ID,也可以是某个Tag
(1)tagOrId:对象ID或者标签tag。
*18.2.33. focus(args)
将焦点移动到指定的 *args第一个参数指定的对象(可以是单个对象的 ID,也可以是某个tag)上。如果有多个对象匹配,则将焦点移动到显示列表中第一个可以接受光标输入的画布对象。取消焦点的方法是调用focus(),也就是不带参数。
*18.2.34 gettags(args)
返回与 *args第一个参数相关联的所有 tags。第一个参数可以是单个对象的 ID,也可以是某个tag。
*18.2.35 icursor(args)
*args可以传递两个参数:
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)Inex:光标的位置。
icursor的作用是将光标移动到 tagOrId指定的对象, tagOrId指定的对象需要支持文本输入和获得焦点。
*18.2.36 index(args)
*args可以传递两个参数:
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)index 参数可以是:INSERT(当前光标的位置),END(最后一个字符的位置),SEL_FIRST(当前选中文本的起始位置),SEL_LAST(当前选中文本的结束位置),还可以使用格式为 “@x, y”(x 和 y 是画布坐标系)来获得与此坐标最接近的位置
index()的作用就是返回参数index 在指定 tagOrId中的位置。这个位置是一个整数。index()可以把用其他方式表示的位置信息转化为数值化位置信息。
*18.2.37 insert(args)
*args可以传递3个参数:
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)index 参数可以是:INSERT(当前光标的位置),END(最后一个字符的位置),SEL_FIRST(当前选中文本的起始位置),SEL_LAST(当前选中文本的结束位置),还可以使用格式为 “@x, y”(x 和 y 是画布坐标系)来获得与此坐标最接近的位置
(3)text: 要插入的文本
insert()的作用就是在允许进行文本编辑的对象的指定位置插入文本。
18.2.38. itemcget(tagOrId, option)
获得指定 tagOrId的选项的当前值
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)option:选项。具体的选项见前面创建画布对象的说明。
**18.2.39 itemconfig(tagOrId, options)
修改指定 tagOrId的选项的当前值
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)option:选项。
**18.2.40 itemconfigure(tagOrId, options)
跟 itemconfig() 的功能一样。
*18.2.41 lift(args)
将指定对象移动到显示列表的顶部。见tag_raise()。
*18.2.42 lower(args)
将指定对象移动到显示列表的底部。见tag_lower()。
*18.2.43 move(args)
*args可以传递的参数有:
(1)tagOrId:可以是单个对象的 ID,也可以是某个tag
(1)dx,dy: 增加的坐标值。dx,dy是要和现有的坐标相加,得到新的坐标值。也就是说新的坐标位置是(x+dx,y+dy)
将 tagOrId对象移动到新位置(x+dx, y+dy)

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_text(120,20,text='新年快乐')
def move():
    b1.move(t,50,100)
b2=tk.Button(root,text='Move',command=move)
b2.pack()
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
18.2.44 postscript(cnf={}, **kw)
将 Canvas 的当前内容封装成 PostScript格式表示
(1) options(kw) 选项的具体含义:

选项 含义
colormode 该选项的值可以是:‘color’(颜色输出),‘gray’(灰阶输出)和 ‘mono’(黑白输出)
file 该选项指定一个文件,将 PostScript 写入该文件中,如果忽略该选项,PostScript 将以字符串的形式返回
height 指定要打印的 Canvas 控件的高度,默认值是 Canvas 控件的整体高度
rotate 如果该选项的值为 False,该页面将以纵向呈现
如果该选项的值为 True,该页面将以横向呈现
x 开始打印的最左边位置,以Canvas坐标系表示
y 开始打印的最顶端位置,以Canvas坐标系表示
width 指定要打印的 Canvas 控件的宽度
默认值是 Canvas 控件的整体宽度
*18.2.45 scale(args)
*args传递的参数有:
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)xOrigin, yOrigin: 要缩放的位置
(3)xScale ,yScale 要缩放的比例
缩放 tagOrId指定的对象。tagOrId指定的对象到(xOrigin,yOrigin)的距离向量(xDistnace,yDistance)分别乘以(xScale,yScale),就是tagOrId的新的位置以及形状。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_rectangle(120,50,140,70,fill='red')
def Scale():
    tag=b1.scale(t,50,50,2,2)
    b1.create_rectangle(120,50,140,70,fill='blue')
    b1.create_rectangle(50,50,70,70,fill='red')
b2=tk.Button(root,text='Scale',command=Scale)
b2.pack()
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
说明:
1)图一中的小红色正方形是最初的图形
2)图二中的大的红色正方形是放大2倍后,并移动到新位置的正方形
3)图二中蓝色的正方形就是图一中的红色正方形。
4)图二中的小红色正方形是缩放或者映射的原始坐标点。可以看到,大的红色正方形到小的的红色正方形的距离是蓝色正方形的两倍。也就是距离和大小都被缩放了。
5)文字对象不会出现缩放,但是可以移动。
18.2.46 scan_dragto(x, y,gain=10)
见下方 scan_mark(x, y)。
18.2.47 scan_mark(x, y)
实现 Canvas 内容的滚动,需要将鼠标按钮事件及当前鼠标位置绑定到 scan_mark(x, y) 方法,然后再将 事件及当前鼠标位置绑定到 scan_dragto(x,y) 方法,就可以实现 Canvas 在当前位置和sacn_mack(x, y) 指定的位置 (x, y) 之间滚动
(1)x,y:坐标值

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_rectangle(120,50,140,70,fill='red')
t2=b1.create_rectangle(160,50,200,70,fill='red')
def move_from(event):
    b1.scan_mark(event.x, event.y)
def move_to(event):
    b1.scan_dragto(event.x, event.y, gain=1) 
b1.bind('<ButtonPress-1>', move_from)
b1.bind('<B1-Motion>',    move_to)
b1.pack()
root.mainloop()

说明:1)先绑定鼠标左键按下事件,回调函数中调用scan_mark()
2)再绑定鼠标移动事件,回调函数中调用scan_dargto()
通过调用绑定这两个事件以及调用scan_mark和scan_dargto方法,可以实现画布内容的拖动。
18.2.48 select_adjust(tagOrId, index)
调整文本对象的选中范围,使得给定的 index 参数指定的位置在范围内
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)index:指定index
18.2.49 select_clear()
取消 Canvas 控件中所有选中的文本对象。
18.2.50 select_from(tagOrId, index)
设定文本对象选中范围的起始位置为 index 参数指定的位置
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)index:指定index
18.2.51 select_item()
返回在Canvas 控件中有文本被选中的对象ID。如果没有则返回 None。
18.2.52 select_to(tagOrId, index)
设定文本对象选中范围的结束位置为 index 参数指定的位置
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)index:指定index

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
t=b1.create_text(120,50,text='新年快乐')
def sel():
    b1.select_from(t,1)
    b1.select_to(t,2)
b2=tk.Button(root,text='Select',command=sel)
b2.pack()
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
18.2.53 tag_bind(tagOrId, sequence=None, func=None, add=None)
为 Canvas 控件上的对象绑定方法。
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2) sequence参数是绑定的事件名称
(3)func是与sequence关联的方法
(4)add:一般情况下,新的绑定会取代已有的绑定。不过如果此参数为“+”的话,新的绑定添加到已有的绑定中。
*18.2.54 tag_lower(args)
将一个或多个对象移至底部或者某一指定对象的下面, 如果是多个画布对象,将它们都移至底部并保留原有顺序。
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)belowThis指定一个对象,tagOrId指定的对象会移动到该对象的下方。如果没有指定,就移动到这个显示列表的最下方。
*18.2.55 tag_raise(args)
将一个或多个对象移至顶部, 如果是多个画布对象,将它们都移至顶部并保留原有顺序
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2)aboveThis指定一个对象,tagOrId指定的对象会移动到该对象的上方。如果没有指定,就移动到这个显示列表的最上方。

import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
for i in range(5):
    b1.create_text(120,10+i*20,
                   text='新年快乐',tag=str(i))
b3=tk.Text(b1,width=20,height=4)
w=b1.create_window(120,150,window=b3,tag='win')
def lift():
    b1.tag_raise('win','3')
    b3.insert(tk.END,'\n')
    b3.insert(tk.END,b1.find_all())
b2=tk.Button(root,text='Raise',command=lift)
b2.pack()
b1.pack()
b3.insert(tk.END,b1.find_all())
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
说明:图一是最开始的显示列表,点击’Raise’后,显示列表的次序发生变化。6是window控件,由最下面移动到了tag=’3’的下面。
18.2.56 tag_unbind(tagOrId, sequence, funcid=None)
解除与 tagOrId绑定的事件
(1)tagOrId可以是单个对象的 ID,也可以是某个tag
(2) sequence参数是绑定的事件名称
(3)funcid:默认是None,表示解除所有的回调函数。但是也可以指定特定的回调函数,表示只解除特定的回调函数。
*18.2.57 tkraise(args)
将指定对象移动到显示列表的顶部,跟 tag_raise 一样。
18.2.58 type(tagOrId)
返回指定对象的类型,返回值可以是:“arc”, “bitmap”,“image”, “line”, “oval”, “polygon”,“rectangle”, “text”, 或"window"。
*18.2.59 xview(args)
该方法用于在水平方向上滚动 Canvas 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现。
(1) 如果第一个参数是 MOVETO,则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端。
(2) 如果第一个参数是 SCROLL,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 UNITS 或 PAGES),例如:xview(SCROLL,3, UNITS) 表示向右滚动三个单位距离。
18.2.60 xview_moveto(fraction)
跟 xview(MOVETO, fraction) 一样。
18.2.61 xview_scroll(number, what)
跟 xview(SCROLL, number, what) 一样。
*18.2.62 yview(args)
该方法用于在垂直方向上滚动 Canvas 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现。
(1) 如果第一个参数是 MOVETO,则第二个参数表示滚动到指定的位置:0.0 表示最顶端,1.0 表示最底端
(2) 如果第一个参数是 SCROLL,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 UNITS 或 PAGES),例如:yview(SCROLL,3, PAGES) 表示向下滚动三页。
18.2.63 yview_moveto(fraction)
跟 yview(MOVETO, fraction) 一样。
18.2.64 yview_scroll(number, what)
跟 yview(SCROLL, number, what) 一样。

猜你喜欢

转载自blog.csdn.net/weixin_42272768/article/details/100876397