Tkinter极简例子——Canvas篇原创

原创
小哥 3年前 (2022-10-17) 阅读数 45 #大杂烩

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, , 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, , printrect)
cv.tag_bind(r1, , 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()
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门