'''Tkinter教程之Canvas篇(1)'''
# 提供可以用来进行绘图的Container,支持基本的几何元素,使用Canvas进行绘图时,所有的操作都是通过Canvas,不是通过它的元素
# 元素的表示可以使用handle或tag。
'''1.第一个Canvas程序'''
# -*- coding: utf-8 -*-
# 指定画布的颜色为白色
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
cv.pack()
root.mainloop()
# 为明显起见,将背景色设置为白色,用以区别root
'''2.创建一个item'''
# -*- coding: utf-8 -*-
# 创建一个矩形,指定画布的颜色为白色
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 创建一个矩形,坐标为(10,10,110,110)
cv.create_rectangle(10, 10, 110, 110)
'''3.指定item的填充色'''
# 指定矩形的填充色为红色
cv.create_rectangle(120, 10, 220, 110, fill='red')
'''4.指定item的边框颜色'''
# 指定矩形的边框颜色为红色
cv.create_rectangle(10,120,110,220,outline = 'red')
'''5.指定边框的宽度'''
# 指定矩形的边框颜色为红色,设置线宽为5,注意与Canvas的width是不同的。
cv.create_rectangle(120,120,220,220,outline = 'red',width = 5)
cv.pack()
root.mainloop()
# 为明显起见,将背景色设置为白色,用以区别root
'''6.画虚线'''
# -*- coding: utf-8 -*-
# 指定画布的背景色为白色
# 使用属性dash,这个值只能为奇数
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
# 指定矩形的边框颜色为红色,画虚线
cv = Canvas(root, bg='white')
cv.create_rectangle(10, 10, 110, 110,
outline='red',
dash=10,
fill='green')
'''7.使用画刷填充'''
cv.create_rectangle(120, 10, 220, 110,
outline = 'red',
stipple = 'gray12',
fill = 'green')
cv.pack()
root.mainloop()
'''8.修改item的坐标'''
# -*- coding: utf-8 -*-
# 指定画布的背景色为白色
# 使用Canvas的方法来重新设置item的坐标
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
rt = cv.create_rectangle(10, 10, 110, 110,
outline='red',
stipple='gray12',
fill='green')
cv.pack()
# 重新设置rt的坐标(相当于移动一个item)
cv.coords(rt, (40, 40, 80, 80))
root.mainloop()
# 动态修改item的坐标
'''9.创建item的tags'''
# -*- coding: utf-8 -*-
# 使用属性tags设置item的tag
# 使用Canvas的方法gettags获取指定item的tags
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 使用tags指定一个tag('r1')
rt = cv.create_rectangle(10, 10, 110, 110,
tags='r1'
)
cv.pack()
print(cv.gettags(rt))
# 使用tags属性指定多个tags,即重新设置tags的属性
cv.itemconfig(rt, tags=('r2', 'r3', 'r4'))
print(cv.gettags(rt))
root.mainloop()
# 动态修改item的坐标
'''10.多个item使用同一个tag'''
# -*- coding: utf-8 -*-
# 多个控件使用同一个tag
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 使用tags指定一个tag('r1')
rt = cv.create_rectangle(10, 10, 110, 110,
tags=('r1', 'r2', 'r3')
)
cv.pack()
cv.create_rectangle(20, 20, 80, 80, tags='r3')
print(cv.find_withtag('r3'))
root.mainloop()
# 动态修改item的坐标
# fid_withtag返回所有与tag绑定的item。
'''11.通过tag来访问item'''
# -*- coding: utf-8 -*-
# 得到了tag值也就得到了这个item,可以对这个item进行相关的设置。
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 使用tags指定一个tag('r1')
rt = cv.create_rectangle(10, 10, 110, 110,
tags=('r1', 'r2', 'r3')
)
cv.pack()
cv.create_rectangle(20, 20, 80, 80, tags='r3')
# 将所有与tag('r3')绑定的item边框颜色设置为蓝色
for item in cv.find_withtag('r3'):
print(item)
cv.itemconfig(item, outline='blue')
root.mainloop()
# 动态修改与tag('r3')绑定的item边框颜色
'''13.向其它item添加tag'''
# -*- coding: utf-8 -*-
# 使用addtag_来向上一个或下一个item添加tag
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 创建三个rectangle
rt1 = cv.create_rectangle(
10, 10, 110, 110,
tags=('r1', 'r2', 'r3'))
rt2 = cv.create_rectangle(
20, 20, 80, 80,
tags=('s1', 's2', 's3'))
rt3 = cv.create_rectangle(
30, 30, 70, 70,
tags=('y1', 'y2', 'y3'))
# 向rt2的上一个item添加r4
cv.addtag_above('r4', rt2)
# 向rt2的下一个item添加r5
cv.addtag_below('r5', rt2)
for item in [rt1, rt2, rt3]:
print(cv.gettags(item))
cv.pack()
root.mainloop()
# Canvas使用了stack的技术,新创建的item总是位于前一个创建的item之上,故调用above时,它会查找rt2上面的item为rt3,故rt3中添加了tag('r4'),
# 同样add_below会查找下面的item。
'''14.返回其它item'''
# -*- coding: utf-8 -*-
# 使用find_xxx查找上一个或下一个item
from tkinter import *
root = Tk()
# 创建一个Canvas,设置其背景色为白色
cv = Canvas(root, bg='white')
# 创建三个rectangle
rt1 = cv.create_rectangle(
10, 10, 110, 110,
tags=('r1', 'r2', 'r3'))
rt2 = cv.create_rectangle(
20, 20, 80, 80,
tags=('s1', 's2', 's3'))
rt3 = cv.create_rectangle(
30, 30, 70, 70,
tags=('y1', 'y2', 'y3'))
# 查找rt2的上一个item,并将其边框颜色设置为红色
cv.itemconfig(cv.find_above(rt2), outline='red',width='5')
# 查找rt2的下一个item,并将其边框颜色设置为绿色
cv.itemconfig(cv.find_below(rt2), outline='green',width='2')
cv.pack()
root.mainloop()
# Canvas使用了stack的技术,新创建的item总是位于前一个创建的item之上,故调用above时,
# 它会查找rt2上面的item为rt3,故rt3中边框颜色设置为红色,同样add_below会查找下面的item。