Tkinter极简例子——Canvas篇

Tkinter Canvas

Canvas极简例子

from tkinter import *

root = Tk()

cv = Canvas(root, bg='black')
cv.pack()

root.mainloop()

创建item

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

cv.create_rectangle(10, 10, 110, 110)


cv.pack()

root.mainloop()

指定item的填充色

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

cv.create_rectangle(10, 10, 110, 110, fill='red')


cv.pack()

root.mainloop()

指定item的边框颜色

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

cv.create_rectangle(10, 10, 110, 110, outline='blue')


cv.pack()

root.mainloop()

指定item的边框宽度

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

cv.create_rectangle(10, 10, 110, 110, outline='blue', width=5)


cv.pack()

root.mainloop()

画虚线

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

cv.create_rectangle(10, 10, 110, 110,
                    outline='blue',
                    width=5,
                    fill='green',
                    dash=10)

cv.pack()

root.mainloop()

画刷填充

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

cv.create_rectangle(10, 10, 110, 110,
                    outline='blue',
                    width=5,
                    fill='green',
                    dash=10,
                    stipple='gray12')

cv.pack()

root.mainloop()

修改item的坐标

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

rt = cv.create_rectangle(10, 10, 110, 110,
                         outline='blue',
                         width=5,
                         fill='green',
                         dash=10,
                         stipple='gray12')

cv.pack()

cv.coords(rt, (40, 40, 80, 80))

root.mainloop()

创建item的tags

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

rt = cv.create_rectangle(10, 10, 110, 110,
                         outline='blue',
                         width=5,
                         fill='green',
                         dash=10,
                         stipple='gray12',
                         tags='rl')

cv.pack()

print(cv.gettags(rt))

cv.itemconfig(rt, tags=('r2', 'r3', 'r4'))
print(cv.gettags(rt))

root.mainloop()

多个item同用一个tag

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

rt = cv.create_rectangle(10, 10, 110, 110,
                         outline='blue',
                         width=5,
                         fill='green',
                         dash=10,
                         stipple='gray12',
                         tags=('r1', 'r2', 'r3'))

cv.pack()

cv.create_rectangle(20, 20, 80, 80, tags='r3')

print(cv.find_withtag('r3'))

root.mainloop()

通过tag访问item

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

rt = cv.create_rectangle(10, 10, 110, 110,
                         outline='blue',
                         width=5,
                         fill='green',
                         dash=10,
                         stipple='gray12',
                         tags=('r1', 'r2', 'r3'))

cv.pack()

cv.create_rectangle(20, 20, 80, 80, tags='r3')

for item in cv.find_withtag('r3'):
    cv.itemconfig(item, outline='red')

root.mainloop()

向其他item添加tag

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

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

cv.addtag_above('r4', rt2)

cv.addtag_below('r5', rt2)

for item in [rt1, rt2, rt3]:
    print(cv.gettags(item))

root.mainloop()

返回其他item

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

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

cv.itemconfig(cv.find_above(rt2), outline='purple')

cv.itemconfig(cv.find_below(rt2), outline='orange')

cv.pack()

root.mainloop()

改变item的顺序

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

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

cv.tag_lower(rt1)
cv.tag_raise(rt3)

cv.itemconfig(cv.find_above(rt2), outline='red')
cv.itemconfig(cv.find_below(rt2), outline='green')

cv.pack()

root.mainloop()

移动item

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

rt1 = cv.create_rectangle(10, 10, 110, 110,
                          tags=('r1', 'r2', 'r3'),
                          outline='green')

cv.create_rectangle(10, 10, 110, 110,
                    tags=('r1', 'r2', 'r3'))

cv.move(rt1, 20, -10)

cv.pack()

root.mainloop()

删除item

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

rt1 = cv.create_rectangle(10, 10, 110, 110,
                          tags=('r1', 'r2', 'r3'),
                          outline='green')

rt2 = cv.create_rectangle(20, 20, 100, 100,
                          tags=('s1', 's2', 's3'))

cv.delete(rt1)

cv.delete('s1')

cv.pack()

root.mainloop()

缩放item

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

rt1 = cv.create_rectangle(10, 10, 110, 110,
                          tags=('r1', 'r2', 'r3'),
                          outline='green')

cv.scale(rt1, 0, 0, 1, 2)

cv.pack()

root.mainloop()

绑定item与event

from tkinter import *


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


root = Tk()

cv = Canvas(root, bg='grey')

rt1 = cv.create_rectangle(10, 10, 110, 110,
                          tags=('r1', 'r2', 'r3'),
                          outline='green',
                          width=8,
                          fill='blue')

cv.tag_bind('r1', '<Button-1>', printrect)

cv.pack()

root.mainloop()

添加绑定事件

from tkinter import *


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

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


root = Tk()

cv = Canvas(root, bg='grey')

rt1 = cv.create_rectangle(10, 10, 110, 110,
                          tags=('r1', 'r2', 'r3'),
                          outline='green',
                          width=8)

cv.tag_bind('r1', '<Button-1>', printrect)
cv.tag_bind('r1', '<Button-3>', printline)

cv.pack()

root.mainloop()

绘制扇形

from tkinter import *

root = Tk()

cv = Canvas(root, bg='grey')

cv.create_arc((10, 10, 110, 110))

cv.pack()

root.mainloop()

扇形,弓形,弧形

from tkinter import *

root = Tk()

d = {1: PIESLICE, 2: CHORD, 3: ARC}

cv = Canvas(root, bg='grey')

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()

设置角度

from tkinter import *

root = Tk()

d = {1: PIESLICE, 2: CHORD, 3: ARC}

cv = Canvas(root, bg='grey')

for i in d:
    cv.create_arc((10, 10 + 60*i, 110, 110 + 60*i),
                  style=d[i],
                  start=30,
                  extent=30)
    print(i, d[i])

cv.pack()

root.mainloop()

绘制位图

from tkinter import *

root = Tk()

d = {1: 'error', 2: 'info', 3: 'question', 4: 'hourglass'}

cv = Canvas(root, bg='grey')

for i in d:
    cv.create_bitmap((20*i, 20*i), bitmap=d[i])

cv.pack()

root.mainloop()

绘制gif图

from tkinter import *

root = Tk()

cv = Canvas(root, bg='white')

img = PhotoImage(file='c:\\python.gif')
cv.create_image((150, 150), image=img)

cv.pack()

root.mainloop()

绘制直线

from tkinter import *

root = Tk()

cv = Canvas(root, bg='white')

d = [(0, 'none'), (1, 'first'), (2, 'last'), (3, 'both')]

for i in d:
    cv.create_line(
        (10, 10 + i[0]*20, 110, 110 + i[0] * 20),
        arrow=i[1],
        arrowshape='40 40 10')

cv.pack()

root.mainloop()

joinstyle属性

from tkinter import *

root = Tk()

cv = Canvas(root, bg='white')

d = [(0, 'none', 'bevel'), (1, 'first', 'miter'), (2, 'last', 'round'), (3, 'both', 'round')]

for i in d:
    cv.create_line(
        (10, 10 + i[0]*20, 110, 110 + i[0] * 20),
        arrow=i[1],
        arrowshape='8 10 3',
        joinstyle=i[2]
    )

cv.pack()

root.mainloop()

绘制椭圆

from tkinter import *

root = Tk()

cv = Canvas(root, bg='white')

cv.create_oval((10, 10, 210, 110), fill='red')

cv.pack()

root.mainloop()

绘制多边形

from tkinter import *

root = Tk()

cv = Canvas(root, bg='white')

cv.create_polygon((10, 10, 10, 200, 100, 200, 23, 23), fill='green')
cv.pack()

root.mainloop()

绘制文本

from tkinter import *

root = Tk()

cv = Canvas(root, bg='white')

cv.create_text((100, 10), text='hello text',
               anchor=W)
cv.pack()

root.mainloop()

选中文本

from tkinter import *

root = Tk()

cv = Canvas(root, bg='white')

txt = cv.create_text((100, 10), text='hello text', anchor=W)

cv.select_from(txt, 2)
cv.select_to(txt, 5)
cv.pack()

root.mainloop()

创建组件

from tkinter import *


def printwindow():
    print('window')


root = Tk()

cv = Canvas(root, bg='white')

bt = Button(cv,
            text='click',
            command=printwindow)

cv.create_window((100, 100),
                 window=bt,
                 anchor=S)

cv.create_line(80, 80, 200, 200)

cv.pack()

root.mainloop()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值