如何使 Tkinter 画布矩形透明?

tkinterpythongui-programming更新于 2025/6/19 8:44:17

canvas 小部件是 Tkinter 库中最通用的小部件之一。通常,它用于在任何应用程序中绘制形状、动画对象和创建复杂图形。要创建像 Rectangle 这样的形状,我们使用 create_rectangle(x,y, x+ width, y+ height, **options) 方法。我们可以通过添加 width、height、fill 和 bg、border width 等属性来配置画布上的项目。

canvas 中的 alpha 属性定义画布项目的透明度。但是,Tkinter 库中没有该属性;因此,我们必须定义一个函数来提供形状中的透明度属性。创建透明度属性函数的步骤如下:

  • 定义内置函数 create_rectangle(x,y,a,b, **options)。
  • 计算必须提供给形状的每种颜色 (RGB) 的 alpha。
  • 使用 pop() 从形状中删除预定义的 alpha(如果适用)。
  • 使用 winfo_rgb() 计算区域中的形状颜色,并将 alpha 添加到形状。
  • 由于新创建的形状将具有不同的颜色和背景,因此必须将其用作图像。
  • 图像可以轻松显示在画布上。

示例

#导入所需的库
from tkinter import *
from PIL import Image, ImageTk

# 创建 tkinter 框架实例
win= Tk()

# 设置 tkinter 窗口的大小
win.geometry("700x350")

# 存储新创建的图像
images=[]

# 定义一个函数来制作透明矩形
def create_rectangle(x,y,a,b,**options):
   if 'alpha' in options:
      # 计算每种颜色 (RGB) 的 alpha 透明度
      alpha = int(options.pop('alpha') * 255)
      # 使用填充变量用透明色填充形状
      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)
# 添加 Canvas 小部件
canvas= Canvas(win)

# 在画布中创建一个矩形
create_rectangle(50, 110,300,280, fill= "blue", alpha=.3)
create_rectangle(40, 90, 420, 250, fill= "red", alpha= .1)
canvas.pack()

win.mainloop()

输出

运行上述代码将在画布中显示多个透明矩形。


相关文章


有用资源