Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để làm cho một hình chữ nhật canvas Tkinter trong suốt?

canvas widget là một trong những widget linh hoạt nhất trong Thư viện Tkinter. Nói chung, nó được sử dụng để vẽ hình dạng, tạo hoạt ảnh cho các đối tượng và tạo đồ họa phức tạp trong bất kỳ ứng dụng nào. Để tạo các hình dạng như Hình chữ nhật, chúng tôi sử dụng tùy chọn create_rectangle (x, y, x + width, y + height, **) phương pháp. Chúng tôi có thể định cấu hình mục trên canvas bằng cách thêm các thuộc tính như chiều rộng, chiều cao, tô màu và bg, chiều rộng đường viền , v.v.

alpha thuộc tính trong canvas xác định độ trong suốt của mục canvas. Tuy nhiên, thuộc tính không có sẵn trong thư viện Tkinter; do đó, chúng ta phải xác định một hàm để cung cấp thuộc tính trong suốt về hình dạng. Các bước để tạo hàm cho thuộc tính minh bạch là,

  • Xác định một hàm có sẵn create_rectangle (tùy chọn x, y, a, b, **) .
  • Tính toán alpha cho mỗi màu (RGB) phải được cung cấp cho hình dạng.
  • Xóa alpha được xác định trước (nếu có) từ hình dạng bằng cách sử dụng pop () .
  • Tính toán màu sắc của hình dạng trong vùng bằng cách sử dụng winfo_rgb () và thêm alpha về hình dạng.
  • Vì một hình dạng mới được tạo sẽ có màu và nền khác, do đó, bạn phải sử dụng hình dạng này làm hình ảnh.
  • Hình ảnh có thể được hiển thị trong canvas một cách dễ dàng.

Ví dụ

# Import the required libraries
from tkinter import *
from PIL import Image, ImageTk

# Create an instance of tkinter frame
win= Tk()

# Set the size of the tkinter window
win.geometry("700x350")

# Store newly created image
images=[]

# Define a function to make the transparent rectangle
def create_rectangle(x,y,a,b,**options):
   if 'alpha' in options:
      # Calculate the alpha transparency for every color(RGB)
      alpha = int(options.pop('alpha') * 255)
      # Use the fill variable to fill the shape with transparent color
      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)
# Add a Canvas widget
canvas= Canvas(win)

# Create a rectangle in 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()

Đầu ra

Chạy đoạn mã trên sẽ hiển thị nhiều hình chữ nhật trong suốt trong canvas.

Làm thế nào để làm cho một hình chữ nhật canvas Tkinter trong suốt?