大麒老师又来解锁新技能啦!上节课咱们用单选、多选按钮做出了能选答案的小界面,今天要玩转Tkinter里超好玩的“可视化神器”——Canvas(画布)组件!画布就像咱们手里的数字画板,能画直线、矩形、圆形,还能写字、贴图片,甚至能让画出来的图形动起来~不管是做小游戏、画五角星,还是做简易画图工具,画布都是核心!今天全程敲代码,跟着大麒老师画,新手也能做出超酷的图形!📌 温故知新:上节课重点快速过
单选按钮:同一组共享1个变量,只能选一个,用variable.get()拿选中值;多选按钮:每个按钮绑1个变量,能选多个,挨个get()看选中状态;小技巧:选项多就用“列表+循环”做,anchor="w"让按钮左对齐,界面更整齐。🔍 一、Canvas画布基础:先搭好“数字画板”
画布是画图形的“容器”,先创建画布,再在上面画画,核心是先懂坐标规则~1. 创建空白画布(超简单)
import tkinter as tkroot = tk.Tk()root.title("大麒老师的空白画板")# 建画布:宽300像素,高300像素,背景白色canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10) # 把画布放到窗口里root.mainloop()
运行后会弹出一个300×300的白色方块,这就是咱们的画板啦!2. 画布坐标规则(敲黑板!必须会)
比如300×300的画布,右下角坐标就是(300, 300)。记住:和数学里的坐标系不一样,这里y轴是向下的哦!🔍 二、画布核心技能:画基础图形(直线/矩形/圆形/文字)
画布能画好多图形,每种图形都有专属方法,参数大多通用,记几个核心的就行~1. 画直线(create_line)
import tkinter as tkroot = tk.Tk()root.title("画直线 | 大麒老师课堂")canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10)# 画红色实线:从(0,0)到(300,300),宽度4像素canvas.create_line(0, 0, 300, 300, fill="red", width=4)# 画蓝色虚线:从(300,0)到(0,300),3像素短线+5像素间隔canvas.create_line(300, 0, 0, 300, fill="blue", width=3, dash=(3, 5))root.mainloop()
参数说明:fill是颜色,width是线宽,dash是虚线样式~2. 画矩形(create_rectangle)
import tkinter as tkroot = tk.Tk()root.title("画矩形 | 大麒老师课堂")canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10)# 画矩形:边框红(宽4),填充橙色,坐标(20,20)到(160,200)canvas.create_rectangle(20, 20, 160, 200, outline="red", fill="orange", width=4)root.mainloop()
参数说明:outline是边框颜色,fill是填充颜色~3. 画椭圆/圆形(create_oval)
关键:外接矩形是正方形,画出来就是圆;是长方形,就是椭圆!import tkinter as tkroot = tk.Tk()root.title("画椭圆和圆形 | 大麒老师课堂")canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10)# 画椭圆(外接长方形)canvas.create_oval(20, 20, 140, 100, outline="red", fill="orange", width=4)# 画圆形(外接正方形)canvas.create_oval(160, 20, 280, 140, outline="red", fill="orange", width=4)root.mainloop()
4. 画文字(create_text)
import tkinter as tkroot = tk.Tk()root.title("画文字 | 大麒老师课堂")canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10)# 画文字:中心点(150,150),蓝色,楷体20号canvas.create_text( 150, 150, text="人生苦短,我用Python", fill="blue", font=("楷体", 20), anchor=tk.CENTER)root.mainloop()
5. 画图片(create_image)
注意:只支持png/gif格式,图片要和代码放同一文件夹~import tkinter as tkroot = tk.Tk()root.title("画图片 | 大麒老师课堂")canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10)# 加载图片(替换成你的图片名)photo = tk.PhotoImage(file="cat.png")# 画图片:中心点(150,150)canvas.create_image(150, 150, image=photo)root.mainloop()
🔍 三、画布超酷功能:让图形动起来(交互)
画布不只能画,还能移动、修改图形,做出交互式效果~1. 移动图形(move):按钮控制小飞机移动
import tkinter as tkroot = tk.Tk()root.title("控制小飞机移动 | 大麒老师课堂")# 建画布canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10)# 加载小飞机图片(替换成你的图片名)plane_photo = tk.PhotoImage(file="plane.png")# 画图片,保存图形对象(后面要移动它)image_item = canvas.create_image(150, 150, image=plane_photo)# 移动函数:上下左右def move_left(): canvas.move(image_item, -5, 0) # 左移5像素(x减5,y不变)def move_right(): canvas.move(image_item, 5, 0) # 右移5像素def move_up(): canvas.move(image_item, 0, -5) # 上移5像素(y减5,x不变)def move_down(): canvas.move(image_item, 0, 5) # 下移5像素# 按钮框架btn_frame = tk.Frame(root)btn_frame.pack(pady=5)# 方向按钮tk.Button(btn_frame, text="左", command=move_left, width=5).pack(side=tk.LEFT, padx=5)tk.Button(btn_frame, text="右", command=move_right, width=5).pack(side=tk.LEFT, padx=5)tk.Button(btn_frame, text="上", command=move_up, width=5).pack(side=tk.LEFT, padx=5)tk.Button(btn_frame, text="下", command=move_down, width=5).pack(side=tk.LEFT, padx=5)root.mainloop()
2. 修改图形(coords):按钮缩小矩形
import tkinter as tkroot = tk.Tk()root.title("修改矩形大小 | 大麒老师课堂")canvas = tk.Canvas(root, width=300, height=300, bg="white")canvas.pack(pady=10)# 画矩形,保存图形对象rect_item = canvas.create_rectangle(100, 100, 150, 150, outline="red", fill="orange")# 缩小矩形的函数def resize_rect(): canvas.coords(rect_item, 120, 120, 130, 130) # 新坐标# 按钮tk.Button(root, text="缩小矩形", command=resize_rect).pack(pady=5)root.mainloop()
🔍 四、综合实战:画五角星(超酷!)
用直线连接五角星的5个顶点,就能画出漂亮的五角星~import tkinter as tkroot = tk.Tk()root.title("画五角星 | 大麒老师课堂")# 400×400画布canvas = tk.Canvas(root, width=400, height=400, bg="white")canvas.pack(pady=10)# 五角星5个顶点坐标(大麒老师已经算好啦)points = [ (200, 10), # 顶端 (320, 370), # 右下 (0, 150), # 左中 (400, 150), # 右中 (80, 370), # 左下 (200, 10) # 回到顶端,闭合图形]# 循环画直线,连接每个顶点for i in range(len(points)-1): x1, y1 = points[i] x2, y2 = points[i+1] canvas.create_line(x1, y1, x2, y2, fill="red", width=5)root.mainloop()
📌 大麒老师课堂小结(记4个关键点)
画布基础:创建时指定宽高/背景色,坐标原点在左上角,x右y下;直线:create_line(x1,y1,x2,y2),参数fill/width;
矩形:create_rectangle(x1,y1,x2,y2),参数outline/fill;
圆形:create_oval(外接正方形);
文字/图片:create_text/create_image;
交互功能:move(item, dx, dy)移动图形,coords(item, 新坐标)修改图形,delete("all")清画布;实战用:画布是做小游戏、画图工具、数据可视化的核心,多练就能玩出花样!