【问题标题】:How can I vary a shape's alpha with Tkinter?如何使用 Tkinter 改变形状的 alpha?
【发布时间】:2013-03-06 06:54:36
【问题描述】:

我有以下代码使用 Tkinter 创建一个窗口并在其中的画布上绘制形状。

from Tkinter import *

class Example(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)

        self.parent = parent 
        self.initUI()

    def initUI(self):

        self.parent.title("Colors")
        self.pack(fill=BOTH, expand=1)

        canvas = Canvas(self)

        canvas.create_oval(10, 10, 80, 80, outline="red", fill="green", width=2)
        canvas.create_oval(110, 10, 210, 80, outline="#f11", fill="#1f1", width=2)
        canvas.create_rectangle(20, 50, 300, 100, outline="black", fill="red", width=2)

        canvas.pack(fill=BOTH, expand=1)


if __name__ == '__main__':
    root = Tk()
    ex = Example(root)
    root.geometry("400x400+100+100") # WIDTHxHEIGHT+X+Y
    root.mainloop()

矩形位于两个椭圆的顶部。有什么办法可以使矩形部分透明(这样椭圆的轮廓可以看到)?

【问题讨论】:

  • 非常聪明!我想知道如何将其推广到其他形状(透明椭圆、多边形、线条、文本等)。令人惊讶的是,Tkinter 能够绘制透明图像,但不支持其他原语。
  • 我发布了一个答案并指出它不是“真正的 alpha”。

标签: python tkinter alpha


【解决方案1】:

我不完全确定,但我认为不可能将 RGBA 颜色设置为画布项的填充颜色。但是,您可以尝试stipple 选项:

canvas.create_rectangle(20, 50, 300, 100, outline="black", fill="red", width=2, stipple="gray50")

【讨论】:

    【解决方案2】:

    您无法更改画布上项目的 alpha。

    【讨论】:

    • 你是怎么知道这个的?它到底在哪里记录?哦,沮丧!
    • @MatthewWalker:我知道,因为没有文档说你可以。 tk 官方文档非常精确和完整,没有任何地方提到 alpha 通道。
    • 感谢您的澄清。这将使提供源变得相当困难;o) 鉴于您无法在 Tkinter 中本地执行此操作,是否有替代方案?我正在考虑使用 Cairo 来渲染可以在 Canvas 中显示的图像。有更好的主意吗?
    • @MatthewWalker,有没有成功?
    • 可以根据其他答案进行:stackoverflow.com/questions/54637795/…
    【解决方案3】:

    一个想法是制作一个具有半透明颜色的矩形 png 图像。然后使用 create_image 代替 create_rectangle。

    【讨论】:

    • 我在聚会上迟到了,但想确认一下:它工作得很好!
    【解决方案4】:

    您无法更改 alpha,但您可以使用常规 tkinter 中的 stipple 选项获得模拟透明度。例如使用:

    mycanvas.create_rectangle(X1, Y1, X2, Y2, fill=color, stipple="gray50")
    

    产量:

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2021-02-27
      • 2023-03-11
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多