import tkinter as tkroot=tk.Tk() #创建主窗口对象rootroot.title("Canvas组件") #窗口标题root.geometry("800x600+300+100")#窗口大小和位置root.resizable(True,True) #窗口可缩放tk.mainloop()
在 Tkinter 中,Canvas(画布)组件是一个多功能的图形绘制区域,主要作用包括:
(1)绘制二维图形:绘制线条、矩形、椭圆(圆)、多边形、弧形、位图、图像等基本形状。(2)显示文本与图像:在画布上任意位置放置文字或图片。(3)作为容器组件:将其他 Tkinter 组件(如按钮、标签)嵌入到画布中,并通过坐标定位。(4)实现交互与动画:通过绑定鼠标、键盘等事件,可以实现拖拽、点击、绘制、移动对象等交互行为,也能通过 move()、coords() 等方法制作动画。 | |
| 画布背景色 |
| 画布宽度(单位:像素) |
| 画布高度(单位:像素) |
| 边框宽度(像素),默认为2 |
| 边框样式,如 "flat", "sunken", "raised", "groove", "ridge" |
| 鼠标悬停时的光标形状,如 "cross", "hand2", "circle" |
highlightthickness | 高亮边框的厚度(获得焦点时),设为0可去掉焦点边框 |
scrollregion | 滚动区域,元组 (x1, y1, x2, y2),与滚动条配合使用 |
xscrollcommand | 绑定水平滚动条 |
| |
| 是否限制滚动区域(默认为True) |
| |
create_line(x1, y1, x2, y2, ...) | 绘制直线(可多点,得到折线) |
create_rectangle(x1, y1, x2, y2) | |
create_oval(x1, y1, x2, y2, ...) | 绘制椭圆/圆(外接矩形坐标) |
create_polygon(points, ...) | 绘制多边形(points为坐标列表) |
create_text(x, y, text, ...) | |
create_image(x, y, image, ...) | 显示图片(需PhotoImage) |
create_arc(x1, y1, x2, y2, ...) | 绘制扇形或弧形 |
move(item_id, dx, dy) | 移动指定图形对象(相对偏移) |
coords(item_id, [new_coords]) | 获取或设置图形对象的坐标 |
delete(item_id) | 删除指定图形对象(可填"all"删除全部) |
itemconfig(item_id, **options) | 修改图形对象的属性(如fill, outline等) |
tag_bind(tag_or_id,event,handler) | 为图形绑定事件(如点击、悬停) |
scale(tag_or_id, x0, y0, x_scale, y_scale) | 缩放图形(相对于参考点) |
bbox(item_id) | 返回图形对象的边界框 (x1,y1,x2,y2) |
find_overlapping(x1,y1,x2,y2) | 返回与矩形区域重叠的所有图形对象ID |
import tkinter as tkroot=tk.Tk() #创建主窗口对象rootroot.title("Canvas组件") #窗口标题root.geometry("800x600+300+100")#窗口大小和位置root.resizable(True,True) #窗口可缩放#创建画布对象canvascanvas=tk.Canvas(root,width=400,height=300,bg="white",highlightthickness=0)canvas.pack(pady=10)tk.mainloop()
import tkinter as tkroot=tk.Tk() #创建主窗口对象rootroot.title("Canvas组件") #窗口标题root.geometry("800x600+300+100")#窗口大小和位置root.resizable(True,True) #窗口可缩放#创建画布canvas=tk.Canvas(root,width=400,height=300,bg="white",highlightthickness=0)canvas.pack(pady=10)#在画布创建初始图形rect_id=canvas.create_rectangle(50,50,150,100,fill="lightblue",outline="black")circle_id=canvas.create_oval(200,50,300,150,fill="yellow",outline="red",width=2)text_id=canvas.create_text(100,75,text="矩形跟随",font=("Arial",10,"italic"),anchor="center")tk.mainloop()
import tkinter as tkroot=tk.Tk() #创建主窗口对象rootroot.title("Canvas组件") #窗口标题root.geometry("800x600+300+100")#窗口大小和位置root.resizable(True,True) #窗口可缩放def move_rect(): #移动矩形(每次向右下角移动10像素) canvas.move(rect_id,10,10) # 移动矩形 canvas.move(text_id,10,10) # 文本一起移动(演示多对象移动)def change_color(): #随机改变圆的填充颜色 import random colors=["red","green","blue","orange","purple","pink"] new_color=random.choice(colors) canvas.itemconfig(circle_id,fill=new_color) #修改填充色def delete_circle(): #删除圆形 canvas.delete(circle_id) btn_delete.config(state=tk.DISABLED)#禁用删除按钮(可选)def reset(): #重置画布:删除所有图形,重新创建初始图形 canvas.delete("all") #清空画布#创建画布canvas=tk.Canvas(root,width=400,height=300,bg="white",highlightthickness=0)canvas.pack(pady=10)#在画布创建初始图形rect_id=canvas.create_rectangle(50,50,150,100,fill="lightblue",outline="black")circle_id=canvas.create_oval(200,50,300,150,fill="yellow",outline="red",width=2)text_id=canvas.create_text(100,75,text="矩形跟随",font=("Arial",10,"italic"),anchor="center")#添加演示按钮框架并定义相关函数frame = tk.Frame(root)frame.pack(pady=5)btn_move=tk.Button(frame,text="移动矩形(及文本)",command=move_rect)btn_move.grid(row=0,column=0,padx=5)btn_color=tk.Button(frame,text="改变圆的颜色",command=change_color)btn_color.grid(row=0,column=1,padx=5)btn_delete=tk.Button(frame,text="删除圆形",command=delete_circle)btn_delete.grid(row=0,column=2,padx=5)btn_reset=tk.Button(frame,text="重置画布",command=reset)btn_reset.grid(row=0,column=3,padx=5)tk.mainloop()
import tkinter as tkroot=tk.Tk() #创建主窗口对象rootroot.title("Canvas组件") #窗口标题root.geometry("800x600+300+100")#窗口大小和位置root.resizable(True,True) #窗口可缩放def move_rect(): #移动矩形(每次向右下角移动10像素) canvas.move(rect_id,10,10) # 移动矩形 canvas.move(text_id,10,10) # 文本一起移动(演示多对象移动)def change_color(): #随机改变圆的填充颜色 import random colors=["red","green","blue","orange","purple","pink"] new_color=random.choice(colors) canvas.itemconfig(circle_id,fill=new_color) #修改填充色def delete_circle(): #删除圆形 canvas.delete(circle_id) btn_delete.config(state=tk.DISABLED)#禁用删除按钮(可选)def reset(): #重置画布:删除所有图形,重新创建初始图形 canvas.delete("all") #清空画布#创建画布canvas=tk.Canvas(root,width=400,height=300,bg="white",highlightthickness=0)canvas.pack(pady=10)#在画布创建初始图形rect_id=canvas.create_rectangle(50,50,150,100,fill="lightblue",outline="black")circle_id=canvas.create_oval(200,50,300,150,fill="yellow",outline="red",width=2)text_id=canvas.create_text(100,75,text="矩形跟随",font=("Arial",10,"italic"),anchor="center")#添加演示按钮框架并定义相关函数frame = tk.Frame(root)frame.pack(pady=5)btn_move=tk.Button(frame,text="移动矩形(及文本)",command=move_rect)btn_move.grid(row=0,column=0,padx=5)btn_color=tk.Button(frame,text="改变圆的颜色",command=change_color)btn_color.grid(row=0,column=1,padx=5)btn_delete=tk.Button(frame,text="删除圆形",command=delete_circle)btn_delete.grid(row=0,column=2,padx=5)btn_reset=tk.Button(frame,text="重置画布",command=reset)btn_reset.grid(row=0,column=3,padx=5)#标签提示info=tk.Label(root,text="点击按钮体验画布操作 | 矩形和文本会一起移动",fg="gray")info.pack(pady=5)tk.mainloop()