第10讲,Canvas 画布控件

你可以在Canvas 画各种图形,也可以展示图片,同时,你还可以移动他们

1. 画一条对角线

import tkinter as tk

window = tk.Tk()
window.title('画布')
window.geometry('300x300')

canvas = tk.Canvas(window,
                   bg='blue',       # 设置背景色
                   height=200,      # 设置高度
                   width=300)       # 设置宽度

canvas.pack()
# 左上角是0,0  右下角是300, 200
line = canvas.create_line(0, 0, 300, 200)
window.mainloop()

效果图
tkinter Canvas

使用create_line创建一条直线时,需要指定4个坐标,分别是x1, y1, x2, y2,(x1, y1) 是起始点坐标,(x2, y2)是结束点坐标。

在所有图形界面中,左上角的坐标值是(0, 0), 画布的高度是200, 宽度是300,那么画布的右下角就是(300, 200), 这和我们平时理解的平面直角坐标系有点不同,但你要学会适应它。

2. 画出圆形,长方形

import tkinter as tk

window = tk.Tk()
window.title('画布')
window.geometry('300x300')

canvas = tk.Canvas(window,
                   bg='blue',       # 设置背景色
                   height=200,      # 设置高度
                   width=300)       # 设置宽度

canvas.pack()
oval = canvas.create_oval(50, 50, 90, 90, fill='red')
rect = canvas.create_rectangle(100, 50, 150, 100)

window.mainloop()

效果图
tkinter Canvas

create_rectangle方法里,前两个参数决定了长方形的左上角坐标,后两个参数决定了长方形的右下角坐标。

create_oval方法并不是只能用来画圆形,椭圆形也可以,这完全取决于传入的参数
tkinter Canvas

前两个参数是左上角的坐标,后两个参数是右下角的坐标。

3. 让图形移动

import tkinter as tk

window = tk.Tk()
window.title('画布')
window.geometry('300x300')

canvas = tk.Canvas(window,
                   bg='blue',       # 设置背景色
                   height=200,      # 设置高度
                   width=300)       # 设置宽度

canvas.pack()
oval = canvas.create_oval(50, 50, 90, 90, fill='red')


def moveit():
    canvas.move(oval, 50, 50)   # x方向移动50, y方向移动50


button = tk.Button(window, text='移动圆', command=moveit)
button.pack()

window.mainloop()

move方法指定了需要移动的图形,后两个参数设置x方向和y方向上各自移动多少距离,正数向下,向右移动,负数向上,向左移动。

4. 展示图片

tkinter自己的PhotoImage只支持gif格式的图片,因此,我们需要使用PIL的ImageTk,这样,所有格式的图片都可以显示

import tkinter as tk
from PIL import ImageTk

window = tk.Tk()
window.title('画布')
window.geometry('500x500')

canvas = tk.Canvas(window,
                   bg='blue',       # 设置背景色
                   height=500,      # 设置高度
                   width=500)       # 设置宽度


canvas.pack()

image_file = ImageTk.PhotoImage(file='./pic/coolpython.png')
image = canvas.create_image(10, 10, anchor='nw', image=image_file)

window.mainloop()

效果图

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案