创建画布
import tkinter as tk
root=tk.Tk() #创建界面
root.title('Canvas') #界面命名
root.geometry('500x300') #设置界面大小
canvas=tk.Canvas(root) #创建画布
canvas.pack() #放置画布
root.mainloop() #放置界面
Canvas画图
1. 矩形
canvas.create_rectangle(x1,y1,x2,y2,fill,outline)
注:在左上角为(x1,y1),右下角为(x2,y2)的矩形中画一个矩形,fill为填充的颜色,outline为边框颜色
2. 椭圆
canvas.create_oval(x1,y1,x2,y2,fill,outline)
注:在左上角为(x1,y1),右下角为(x2,y2)的矩形中画一个椭圆,fill为填充的颜色,
3. 直线
canvas.create_line(x1,y1,x2,y2,fill)
注:从(x1,y1)到(x2,y2)画一条直线,fill为直线颜色
4. 扇形
canvas.create_arc(x1,y1,x2,y2,fill,outline,start,extent)
注:在左上角为(x1,y1),右下角为(x2,y2)的矩形中画一个扇形,start为开始角度,extent为结束角度
程序设计
在root界面中画一条直线,一个矩形,一个圆形和一个扇形,并且单机按钮可以移动图形
import tkinter as tk
root=tk.Tk()
root.title('Canvas')
width=500
height=300
screenwidth=root.winfo_screenwidth()
screenheight=root.winfo_screenheight()
x=(screenwidth-width)//2
y=(screenheight-height)//2
root.geometry('%dx%d+%d+%d'%(width,height,x,y))
canvas=tk.Canvas(root,width=width,height=height,bg='yellow')
line=canvas.create_line(50,50,100,100,fill='red')
oval=canvas.create_oval(150,50,200,100,outline='black',fill='blue')
rectangle=canvas.create_rectangle(250,50,300,100,outline='black',fill='pink')
arc=canvas.create_arc(350,50,400,150,start=0,extent=180,outline='black',fill='green')
def move():
canvas.move(line,0,10)
canvas.move(oval,0,10)
canvas.move(rectangle,0,10)
canvas.move(arc,0,10)
canvas.pack()
tk.Button(root,text='Move',width=5,bg='white',command=move).place(x=225,y=200)
root.mainloop()
运行结果
Canvas导入图片
tkinter中的Canvas只能直接导入动图,即gif格式的图片,其他图片需要使用ImageTk库的PhotoImage()函数进行导入
1. 导入gif图片
canvas.create_image()
注:括号中填入图片的地址即可
2. 导入jpg图片
首先需要打开jpg图片并命名为img
img=Image.open('d:\\图片\\1.jpg')
然后我们把它缩放一下与画板大小一致
img.thumbnail((width,height))
将jpg格式的图片转换成tkinter可识别的图像
photo=ImageTk.PhotoImage(img)
将图片导入即可
canvas.create_image(0,0,image=photo,anchor='nw')
完整程序
import tkinter as tk
from PIL import Image,ImageTk
root=tk.Tk()
root.title('Canvas')
width=500
height=300
screenwidth=root.winfo_screenwidth()
screenheight=root.winfo_screenheight()
x=(screenwidth-width)//2
y=(screenheight-height)//2
root.geometry('%dx%d+%d+%d'%(width,height,x,y))
canvas=tk.Canvas(root,width=width,height=height)
img=Image.open('d:\\图片\\1.jpg')
img.thumbnail((width,height))
photo=ImageTk.PhotoImage(img)
canvas.create_image(0,0,image=photo,anchor='nw')
canvas.pack()
root.mainloop()