Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีทำให้สี่เหลี่ยมผืนผ้าผ้าใบ Tkinter โปร่งใส?


ผ้าใบ วิดเจ็ตเป็นหนึ่งในวิดเจ็ตที่หลากหลายที่สุดใน Tkinter Library โดยทั่วไปจะใช้เพื่อวาดรูปร่าง ทำให้วัตถุเคลื่อนไหว และสร้างกราฟิกที่ซับซ้อนในแอปพลิเคชันใดๆ ในการสร้างรูปร่างเช่นสี่เหลี่ยมผืนผ้า เราใช้ create_rectangle(x,y, x+ width, y+ height, **ตัวเลือก) กระบวนการ. เราสามารถกำหนดค่ารายการบนผืนผ้าใบโดยการเพิ่มคุณสมบัติเช่น ความกว้าง ความสูง การเติม และ bg ความกว้างของเส้นขอบ , ฯลฯ

อัลฟ่า คุณสมบัติในผืนผ้าใบกำหนดความโปร่งใสของรายการผ้าใบ อย่างไรก็ตาม คุณสมบัตินี้ไม่มีให้บริการในห้องสมุด Tkinter ดังนั้น เราต้องกำหนดฟังก์ชันเพื่อให้แอตทริบิวต์โปร่งใสในรูป ขั้นตอนในการสร้างฟังก์ชันสำหรับแอตทริบิวต์ความโปร่งใสคือ

  • กำหนดฟังก์ชัน inbuilt create_rectangle(x,y,a,b, **options) .
  • คำนวณ อัลฟา สำหรับแต่ละสี (RGB) ที่ต้องกำหนดให้กับรูปร่าง
  • ลบ อัลฟ่า . ที่กำหนดไว้ล่วงหน้า (ถ้ามี) จากรูปร่างโดยใช้ pop() .
  • คำนวณสีรูปร่างในพื้นที่โดยใช้ winfo_rgb() และเพิ่ม อัลฟ่า สู่รูปร่าง
  • เนื่องจากรูปร่างที่สร้างขึ้นใหม่จะมีสีและพื้นหลังต่างกัน จึงจำเป็นต้องใช้สิ่งนี้เป็นรูปภาพ
  • รูปภาพสามารถแสดงบนผืนผ้าใบได้อย่างง่ายดาย

ตัวอย่าง

# 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()

ผลลัพธ์

การเรียกใช้โค้ดด้านบนจะแสดงสี่เหลี่ยมโปร่งใสหลายรูปในแคนวาส

วิธีทำให้สี่เหลี่ยมผืนผ้าผ้าใบ Tkinter โปร่งใส?