当前位置:首页>python>python高阶:24、tkinter库(Canvas组件)

python高阶:24、tkinter库(Canvas组件)

  • 2026-10-11 07:28:21
python高阶:24、tkinter库(Canvas组件)
1、tkinter库的导入和主窗口的创建
import tkinter as tkroot=tk.Tk()               #创建主窗口对象rootroot.title("Canvas组件")    #窗口标题root.geometry("800x600+300+100")#窗口大小和位置root.resizable(True,True)     #窗口可缩放tk.mainloop()
2、Canvas组件(类)

在 Tkinter 中,Canvas(画布)组件是一个多功能的图形绘制区域,主要作用包括:

(1)绘制二维图形:绘制线条、矩形、椭圆(圆)、多边形、弧形、位图、图像等基本形状。
(2)显示文本与图像:在画布上任意位置放置文字或图片。
(3)作为容器组件:将其他 Tkinter 组件(如按钮、标签)嵌入到画布中,并通过坐标定位。
(4)实现交互与动画:通过绑定鼠标、键盘等事件,可以实现拖拽、点击、绘制、移动对象等交互行为,也能通过 move()、coords() 等方法制作动画。
3、Canvas组件常用属性
属性
说明
bg

画布背景色

width

画布宽度(单位:像素)

height

画布高度(单位:像素)

bd

边框宽度(像素),默认为2

relief

边框样式,如 "flat", "sunken", "raised", "groove", "ridge"

cursor

鼠标悬停时的光标形状,如 "cross", "hand2", "circle"

highlightthickness

高亮边框的厚度(获得焦点时),设为0可去掉焦点边框

scrollregion

滚动区域,元组 (x1, y1, x2, y2),与滚动条配合使用

xscrollcommand 

绑定水平滚动条

yscrollcommand
绑定垂直滚动条

confine

是否限制滚动区域(默认为True)

4、Canvas组件常用方法
方法
说明

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

5、示例代码
(1)创建画布
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()
(2)创建初始图形
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()
(3)添加显示按钮框架
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()
(4)添加标签提示
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()

最新文章

随机文章