'''16.移动item'''
# -*- coding: utf-8 -*-
# move指定x,y在偏移量
from tkinter import *

root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 创建两个同样的rectangle,比较移动前后的不同
rt1 = cv.create_rectangle(
    10, 10, 110, 110,
    tags=('r1', 'r2', 'r3'))
cv.create_rectangle(
    10, 10, 110, 110,
    tags=('r1', 'r2', 'r3'))
# 移动rt1
cv.move(rt1, 20, -10)
cv.pack()
root.mainloop()
# move可以指定x,y在相对偏移量,可以为负值



'''17.删除item'''
# -*- coding: utf-8 -*-
# delete删除给定的item
from tkinter import *

root = Tk()
cv = Canvas(root, bg='white')
# 创建两个rectangle
rt1 = cv.create_rectangle(
    10, 10, 110, 110,
    tags=('r1', 'r2', 'r3'))
r2 = cv.create_rectangle(
    20, 20, 110, 110,
    tags=('s1', 's2', 's3'))
# 使用id删除rt1
cv.delete(rt1)
# 使用tag删除r2
cv.delete('s1')

cv.pack()
root.mainloop()
# 两种方法删除item(id/tag)



'''18.缩放item'''
# -*- coding: utf-8 -*-
# scale缩放item,计算公式:(coords - offset)*scale + offset
from tkinter import *

root = Tk()
cv = Canvas(root, bg='white')
# 创建两个rectangle
rt1 = cv.create_rectangle(
    10, 10, 110, 110,
    tags=('r1', 'r2', 'r3'))
# 将y坐标放大为原来的2位,x坐标值不变
cv.scale(rt1, 0, 0, 1, 2)
cv.pack()
root.mainloop()
# scale的参数为(self,xoffset,yoffset,xscale,yscale)



'''19.绑定item与event'''
# -*- coding: utf-8 -*-
# 使用tag_bind来绑定item与事件
from tkinter import *

root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 创建三个rectangle
rt1 = cv.create_rectangle(
    10, 10, 110, 110,
    width=8,
    tags=('r1', 'r2', 'r3'))


def printRect(event):
    print('rectangle')


# 绑定item与事件
cv.tag_bind('r1', '<Button-1>', printRect)
cv.pack()
root.mainloop()
# 只有点击到矩形的边框时才会触发事件



'''20.添加绑定事件'''
# -*- coding: utf-8 -*-
# 使用tag_bind来绑定item与事件,与参考上测试结果不一致。
from tkinter import *

root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 创建三个rectangle
rt1 = cv.create_rectangle(
    10, 10, 110, 110,
    width=8,
    tags=('r1', 'r2', 'r3'))


def printRect(event):
    print('rectangle')


def printLine(event):
    print('line')


# 绑定item与左键事件
cv.tag_bind('r1', '<Button-1>', printRect)
# 绑定item与右键事件
cv.tag_bind('r1', '<Button-3>', printLine)
cv.pack()
root.mainloop()
# 只有点击到矩形的边框时才会触发事件,不使用add参数,默认就是向这个item添加一个处理函数,它不会替换原来的事件函数,例子结果:既响应左键又响应右键



'''21.绑定新的item与现有的tags'''
# -*- coding: utf-8 -*-
# 使用tag_bind来绑定item与事件,测试结果与参考上的说法不一致
from tkinter import *

root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 创建三个rectangle
rt1 = cv.create_rectangle(
    10, 10, 110, 110,
    width=8,
    tags=('r1', 'r2', 'r3'))


def printRect(event):
    print('rectangle')


def printLine(event):
    print('line')


# 绑定item与左键事件
cv.tag_bind('r1', '<Button-1>', printRect)
# 绑定item与右键事件
cv.tag_bind('r1', '<Button-3>', printLine)
# 创建一个line,并将其tags设置为'r1'
cv.create_line(10, 200, 100, 200, width=5, tags='r1')
cv.pack()
root.mainloop()
# 将事件与tag('r1')绑定后,创建新的item并指定已绑定事件的tag,新创建的item同样也与事件绑定,这个与参考上的说法也不一致



'''Tkinter教程之Canvas篇(4)'''
'''22.绘制弧形'''
# -*- coding: utf-8 -*-
# 创建一个ARC
from tkinter import *

root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 使用默认参数创建一个ARC,结果为90度的扇形
cv.create_arc((10, 10, 110, 110), )
'''23.设置弧形的样式'''
d = {1: PIESLICE, 2: CHORD, 3: ARC}
for i in d:
    cv.create_arc((10, 10 + 60 * i, 110, 110 + 60 * i), style=d[i])
    print(i, d[i])
cv.pack()
root.mainloop()



'''24.设置弧形的角度'''
# -*- coding: utf-8 -*-
# 使用start/extent指定起始角度与偏移角度
from tkinter import *

root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
d = {1: PIESLICE, 2: CHORD, 3: ARC}
for i in d:
    cv.create_arc(
        (10, 10 + 60 * i, 110, 110 + 60 * i),
        style=d[i],  # 指定样式
        start=30,  # 指定起始角度
        extent=30  # 指定角度偏移量
    )
cv.pack()
root.mainloop()
# 使用三种样式,start指定起始角度;extent指定角度偏移