Tkinter教程之Canvas(1)篇

'''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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值