使用透明背景、ttk 框架背景颜色配置 tkinter/ttk 小部件?

Posted

技术标签:

【中文标题】使用透明背景、ttk 框架背景颜色配置 tkinter/ttk 小部件?【英文标题】:Configure tkinter/ttk widgets with transparent backgrounds, ttk frame background colors? 【发布时间】:2011-04-30 00:16:18 【问题描述】:

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

我也在寻找一种方法来更改 ttk Frame 小部件的背景颜色?

我是否需要使用新的 ttk Style 对象来完成上述操作? (我是 tkinter/ttk 的新手,但我仍在努力思考正确的做事方式)。

【问题讨论】:

【参考方案1】:

除了在 OSX 上,您无法完成您想要的操作,因为所有这些小部件都是在矩形的真实窗口上绘制的(除非您使用一些低级技巧从窗口中切出洞担心;即使我有代码——Tcl/Tk,而不是 Python/Tkinter——也不是我推荐的方法)。 OSX 是个例外,因为那里的小部件(大部分)不是在真实的窗口上绘制的,而是使用更轻量级的系统(因为这就是 OSX 的工作方式)。

可以调整小部件,使其边框比正常情况少,如果您使用的样式基本保持正方形,这没问题。或者,如果您将画布用于“有趣”的表面,您可以在画布上构建类似按钮的东西,这可能更适合您实际做的事情。

要更改 Ttk 框架的背景颜色,您必须对其应用样式。到目前为止,我看到的关于样式创建的最佳说明在 tkdocs style tutorial,当我想查找如何做这些事情时,会去那里。 (是的,Ttk 文档本身应该涵盖这一点,但目前还没有。)

【讨论】:

答案(“做不到”)可能是正确的,但基本原理(矩形窗口)却不是。无论窗口的形状如何,前景色和背景色原则上都应该支持透明度。如果 Label 小部件支持透明背景颜色(空字符串“”),则应该可以编写一种样式,将该颜色用于除文本前景之外的所有内容,并且透明元素的形状无关紧要。 @Dave:标准 X11 不支持颜色的透明度,无论您认为它“应该”多少(但理论上可以通过使用 OpenGL 对特定表面做到这一点)。在 Windows 中,UpdateLayeredWindow 可以做一些事情,但没有人真正贡献过代码来做这件事。 我可能错了,但应该可以在需要时用具有透明度的图像或 gif 替换小部件,然后禁用窗口管理器。但是,您必须为按下按钮等设置动画。

以上是关于使用透明背景、ttk 框架背景颜色配置 tkinter/ttk 小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tkinter.ttk Treeview 上完全更改背景颜色

ttk treeview:交替行颜色

怎么将ubuntu终端工具的背景颜色设置为透明

在 Python 3 中使用 tkinter 更改单选按钮的背景颜色

如何隐藏主窗口标题栏并在 kivy 框架中放置透明背景?

如何将面板的背景颜色设置为透明