配置tkinter/ttk小部件的透明背景,ttk框架背景颜色?

8

是否可以配置tkinter或ttk小部件(LabelEntryText),使它们具有透明背景,以便将它们放置在具有自定义背景颜色的容器中或放置在画布图形或图像上方?

我还想知道如何更改ttk Frame小部件的背景颜色?

我需要使用新的ttk Style对象来完成上述操作吗?(我对tkinter/ttk还不熟悉,仍在努力理解正确的操作方式)。

1个回答

3
除了在OSX上,你想要的是做不到的,因为所有这些小部件都是在真实的窗口上绘制的,而这些窗口是矩形的(除非你使用一些低级技巧从相关窗口中裁剪出空洞;尽管我有代码可以做到这一点,但我不建议这种方法 - 对于Tcl/Tk而言,Python/Tkinter显然不行)。OSX是一个例外,因为那里的小部件(大多数)不是在真实的窗口上绘制的,而是使用了一个更轻量级的系统(因为这就是OSX的工作方式)。
你可以调整小部件的边框比正常情况下少一些,如果你使用的样式基本上是正方形的话,这是可以接受的。或者,如果你正在使用画布来创建“有趣”的表面,你可以在画布上构建类似按钮的东西,这可能更适合你实际要做的事情。
要更改Ttk框架的背景颜色,您需要对其应用样式。迄今为止,我看过的关于样式创建的最好说明在tkdocs样式教程中,这也是我查找如何做这些事情的地方(是的,Ttk文档本身应该涵盖这一点,但它尚未涵盖)。

答案(“无法完成”)可能是正确的,但理由(矩形窗口)不正确。无论窗口的形状如何,前景色和背景色原则上应支持透明度。如果Label小部件支持透明背景颜色(空字符串“”),那么应该可以编写一个样式,将该颜色用于除文本前景色以外的所有内容,透明元素的形状就不重要了。 - Dave
@Dave:标准的X11不支持颜色透明度,无论你认为它“应该”支持(但理论上可以通过OpenGL在特定表面上实现)。在Windows中,可以使用UpdateLayeredWindow来实现一些功能,但实际上没有人贡献代码来实现它。 - Donal Fellows
我可能错了,但是基本上可以用带有透明度的图像或gif替换小部件,然后禁用窗口管理器。但是,您需要动画化按下按钮等操作。 - kippel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接