Python基础入门学习笔记 071 GUI的终极选择:Tkinter8

发布时间 2023-08-23 14:00:46作者: 一杯清酒邀明月

Canvas(画布)组件

一个可以让你随心所欲绘制界面的组件。通常用于显示和编辑图形,可以用它来绘制直线、图形、多边形,甚至是绘制其他组件。

实例1:

 1 from tkinter import *
 2 root = Tk()
 3 #创建canvas对象框,设置其宽度、高度与背景色
 4 w = Canvas(root,width=200,height=100,background="black")
 5 w.pack()
 6 
 7 #画一条黄色的线
 8 w.create_line(0,50,200,50,fill="yellow")
 9 #画一条红色的竖线(虚线)
10 w.create_line(100,0,100,100,fill="red")
11 #中间画一个蓝色的矩形
12 w.create_rectangle(50,25,150,75,fill="blue")
13 
14 mainloop()

 实例2:

 1 from tkinter import *
 2 root = Tk()
 3 #创建canvas对象框,设置其宽度、高度与背景色
 4 w = Canvas(root,width=200,height=100,background="black")
 5 w.pack()
 6 
 7 #画一条黄色的线(参数为其x、y轴坐标)
 8 line1 = w.create_line(0,50,200,50,fill="yellow")
 9 #画一条红色的竖线(虚线)
10 line2 = w.create_line(100,0,100,100,fill="red")
11 #中间画一个蓝色的矩形
12 rect1 = w.create_rectangle(50,25,150,75,fill="blue")
13 
14 w.coords(line1,0,25,200,25)#将line1移动到新的坐标
15 w.itemconfig(rect1,fill="red")#重新设置矩形的填充色为红色
16 w.delete(line2)#删除线2
17 
18 #创建一个按钮,按下时删除所有图形
19 Button(root,text="删除全部",command=(lambda x=ALL:w.delete(x))).pack()
20 
21 mainloop()

 实例3:在Canvas上显示文本

 1 from tkinter import *
 2 root = Tk()
 3 #创建canvas对象框,设置其宽度、高度与背景色
 4 w = Canvas(root,width=200,height=100,background="black")
 5 w.pack()
 6 
 7 #画一条绿色的斜线(参数为其x、y轴坐标),宽度为三个像素点
 8 line1 = w.create_line(0,0,200,100,fill="green",width=3)
 9 #画一条绿色的斜线
10 line2 = w.create_line(200,0,0,100,fill="green",width=3)
11 #中间画两个矩形
12 rect1 = w.create_rectangle(40,20,160,80,fill="blue")
13 rect2 = w.create_rectangle(60,30,140,70,fill="yellow")
14 #在矩形正中(默认)显示文本,坐标为文本正中坐标
15 w.create_text(100,50,text="Hadley")
16 
17 #创建一个按钮,按下时删除所有图形
18 Button(root,text="删除全部",command=(lambda x=ALL:w.delete(x))).pack()
19 
20 mainloop()

 实例4:绘制椭圆

 1 from tkinter import *
 2 root = Tk()
 3 #创建canvas对象框,设置其宽度、高度与背景色
 4 w = Canvas(root,width=200,height=100,background="white")
 5 w.pack()
 6 
 7 #绘制一个虚线的矩形
 8 w.create_rectangle(40,20,160,80,dash=(4,4))
 9 #绘制椭圆,粉色填充
10 w.create_oval(40,20,160,80,fill="pink")
11 #在矩形正中(默认)显示文本,坐标为文本正中坐标
12 w.create_text(100,50,text="Hadley")
13 
14 mainloop()

实例5:绘制圆形

 1 from tkinter import *
 2 root = Tk()
 3 #创建canvas对象框,设置其宽度、高度与背景色
 4 w = Canvas(root,width=200,height=100,background="white")
 5 w.pack()
 6 
 7 #绘制一个虚线的矩形
 8 w.create_rectangle(40,20,160,80,dash=(4,4))
 9 #绘制圆形,粉色填充
10 #w.create_oval(40,20,160,80,fill="pink")
11 w.create_oval(70,20,130,80,fill="pink")
12 #在矩形正中(默认)显示文本,坐标为文本正中坐标
13 w.create_text(100,50,text="Hadley")
14 
15 mainloop()

 实例6:绘制多边形

 1 from tkinter import *
 2 import math as m
 3 
 4 root = Tk()
 5 w=Canvas(root,width=200,height=150,background="red")
 6 w.pack()
 7 center_x = 100
 8 center_y = 80
 9 r = 70
10 points = [
11     #左上角A
12     center_x - int(r*m.sin(2*m.pi/5)),
13     center_y - int(r*m.cos(2*m.pi/5)),
14     #右上角C
15     center_x + int(r*m.sin(2*m.pi/5)),
16     center_y - int(r*m.cos(2*m.pi/5)),
17     #左下角E
18     center_x - int(r*m.sin(m.pi/5)),
19     center_y + int(r*m.cos(m.pi/5)),
20     #顶点D
21     center_x,
22     center_y - r,
23     #右下角B
24     center_x + int(r*m.sin(m.pi/5)),
25     center_y + int(r*m.cos(m.pi/5)),
26     ]
27 #创建多边形方法,会自动按ACEDBA的形式连线,如果构成闭环,则会自动填充
28 w.create_polygon(points,outline="green",fill="yellow")
29 
30 w.create_text(100,80,text="Hadley")
31 
32 mainloop()

 实例7:

 1 from tkinter import *
 2 
 3 root = Tk()
 4 w=Canvas(root,width=400,height=200,background="white")
 5 w.pack()
 6 
 7 def paint(event):#画小圆
 8     x1,y1 = (event.x - 1),(event.y -1)
 9     x2,y2 = (event.x + 1),(event.y +1)
10     w.create_oval(x1,y1,x2,y2,fill="red")
11 
12 w.bind("<B1 - Motion>",paint)#画布与鼠标进行绑定
13 Label(root,text="按住鼠标左键并移动,开始绘制你的理想蓝图吧。。。").pack(side=BOTTOM)
14 
15 mainloop()