Widget canvas là một trong những widget linh hoạt nhất trong Thư viện Tkinter. Thông thường dùng để vẽ hình dạng, hoạt ảnh đối tượng và tạo đồ họa phức tạp. Để tạo hình dạng như Hình chữ nhật, ta dùng phương thức create_rectangle(x,y, x+width, y+height, **options). Ta cấu hình mục trên canvas bằng thuộc tính width, height, fill, bg, border width, v.v.
Thuộc tính alpha trong canvas xác định độ trong suốt của mục canvas. Tuy nhiên, thuộc tính này không có sẵn trong Tkinter; do đó, ta phải định nghĩa hàm cung cấp thuộc tính trong suốt cho hình dạng. Các bước tạo hàm cho thuộc tính trong suốt:
- Định nghĩa hàm tích hợp create_rectangle(x,y,a,b, **options).
- Tính alpha cho mỗi màu (RGB) cung cấp cho hình dạng.
- Loại bỏ alpha định sẵn (nếu có) khỏi hình dạng bằng pop().
- Tính màu hình dạng trong vùng dùng winfo_rgb() và thêm alpha vào hình dạng.
- Vì hình mới tạo có màu và nền khác nhau, nên cần dùng nó như một image.
- Image có thể hiển thị trên canvas dễ dàng.
Ví dụ
# Import thư viện cần thiết
from tkinter import *
from PIL import Image, ImageTk
# Tạo instance của frame tkinter
win = Tk()
# Đặt kích thước cửa sổ tkinter
win.geometry("700x350")
# Lưu hình ảnh mới tạo
images = []
# Định nghĩa hàm tạo hình chữ nhật trong suốt
def create_rectangle(x, y, a, b, **options):
if 'alpha' in options:
# Tính độ trong suốt alpha cho mỗi màu (RGB)
alpha = int(options.pop('alpha') * 255)
# Dùng biến fill để tô màu hình với màu trong suốt
fill = options.pop('fill')
fill = win.winfo_rgb(fill) + (alpha,)
image = Image.new('RGBA', (a - x, b - y), fill)
images.append(ImageTk.PhotoImage(image))
canvas.create_image(x, y, image=images[-1], anchor='nw')
canvas.create_rectangle(x, y, a, b, **options)
# Thêm widget Canvas
canvas = Canvas(win)
# Tạo hình chữ nhật trong canvas
create_rectangle(50, 110, 300, 280, fill="blue", alpha=.3)
create_rectangle(40, 90, 420, 250, fill="red", alpha=.1)
canvas.pack()
win.mainloop()
Kết quả
Chạy mã trên sẽ hiển thị nhiều hình chữ nhật trong suốt trên canvas.
