当前位置: 首页 > 面试题库 >

如何使Tkinter画布矩形透明?

唐元青
2023-03-14
问题内容

我需要使tkinter矩形透明。有谁知道这是怎么做到的吗?

我尝试指定alpha=".5", opacity=".5",并尝试在颜色代码的末尾添加两个数字fill="#ff000066"。这些东西似乎都不起作用,我找不到正确的语法。

import tkinter

root = tkinter.Tk()
canvas = tkinter.Canvas(root, width=800, height=600)
canvas.pack()

canvas.create_rectangle(50, 50, 100, 100, fill="#ff0000", alpha=0.5)

root.mainloop()

这段代码给了我这个信息:_tkinter.TclError: unknown option "-alpha",所以显然这不是正确的方法。


问题答案:

您可以使用透明图像来模拟结果。使用Pillow创建透明的图像,然后用canvas.create_image(...)画它。下面是一个示例代码:

from tkinter import *
from PIL import Image, ImageTk

root = Tk()

images = []  # to hold the newly created image

def create_rectangle(x1, y1, x2, y2, **kwargs):
    if 'alpha' in kwargs:
        alpha = int(kwargs.pop('alpha') * 255)
        fill = kwargs.pop('fill')
        fill = root.winfo_rgb(fill) + (alpha,)
        image = Image.new('RGBA', (x2-x1, y2-y1), fill)
        images.append(ImageTk.PhotoImage(image))
        canvas.create_image(x1, y1, image=images[-1], anchor='nw')
    canvas.create_rectangle(x1, y1, x2, y2, **kwargs)

canvas = Canvas(width=300, height=200)
canvas.pack()

create_rectangle(10, 10, 200, 100, fill='blue')
create_rectangle(50, 50, 250, 150, fill='green', alpha=.5)
create_rectangle(80, 80, 150, 120, fill='#800000', alpha=.8)

root.mainloop()


 类似资料:
  • 我试图在现有画布中的特定框顶部添加一些红色矩形,与预期结果图像完全相同,但它们根本没有出现,因为我的代码显示了部署应用程序时当前不希望出现的结果。我的代码是在顶行和底行分别创建4个矩形,但我只想将其添加到框2-6的顶部,但我知道需要为框1顶部的红色矩形添加额外的代码 activity_main.xml MainActivity.java

  • 实际上,我可以使用函数来完成。我从“HTML5画布-如何在图像背景上画一条线?”中得到的东西。但是我需要在不使用from函数的情况下绘制图像,如下所示:

  • 问题内容: 我发现只能填充矩形,而没有圆角,该怎么办? 问题答案: HTML5画布没有提供绘制带有圆角的矩形的方法。 如何使用和方法? 您也可以使用方法代替方法。

  • 我试图创建一个画布,在其中我们可以绘制直线和矩形使用鼠标事件的功能选择的输入。 我将mousedown、mousemove和mouseup事件侦听器附加到画布DOM,并在选择行输入或矩形输入时使用适当的函数 但它什么也没有画出来。 null null

  • 基于我在画布上使用的代码和截图,我试着填充一个红色的矩形,但是没有效果。如何才能确保只填充最上面一行左起第二个矩形?

  • 问题内容: 如何使画布透明?我需要,因为我想将两个画布彼此叠放。 问题答案: 默认情况下,画布是透明的。 尝试设置页面背景图像,然后在其上放置画布。如果画布上未绘制任何内容,则可以完全看到页面背景。 可以将画布视为在玻璃板上绘画。