python - 当我透明背景颜色时也获得背景颜色
问题描述
我正在尝试使 tkinter 标签小部件的背景透明。但我仍然看到一些使它变脏的背景颜色。
代码
import tkinter as tk
root = tk.Tk()
root.overrideredirect(True)
root.geometry("120x30+1000+550")
label = tk.Label(root, text='Python', bg='white', fg='red', font=('Courier', 25))
label.pack()
root.wm_attributes("-topmost", True)
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")
root.mainloop()
我确实透明了标签,但我可以在文本后面看到一些不必要的白色。
我在做什么错?
解决方案
正如@furas 所说:
tkinter 首先创建白色背景并使用抗锯齿绘制红色文本,这会创建混合颜色的像素 - 红色和白色 - 因此它们不是纯白色。后来 system/wm (wm = windows manager) 只删除纯白色像素以创建透明背景。对你来说,像素看起来是白色的,但对于计算机来说不是理想的白色,它不会删除它们。如果你使用类似于红色的 bg
所以,我改成bg='white'
与红色相似的颜色,bg='#fc0000'
这解决了这个问题
import tkinter as tk
root = tk.Tk()
root.overrideredirect(True)
root.geometry("120x30+1000+550")
label = tk.Label(root, text='Python', bg='#fc0000', fg='red', font=('Courier', 25))
label.pack()
root.wm_attributes("-topmost", True)
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", '#fc0000')
非常感谢furas
推荐阅读
- apache-spark - KubernetesPodOperator 未按预期发送参数
- kotlin - 如何在 IntelliJ 中不使用 gradle 来执行 Kotlin main
- flutter - 如何将选中的 List Tile 中的数据传递到 Flutter 中的下一页(篮子)
- python - 将 ode45 代码从 MATLAB 转换为 python 代码
- python - 如何使用现有数据库覆盖 Django 中的 M2M 字段名称和模型?
- docker - 使用 docker compose 创建卷时如何授予非 root 权限?
- firebase - 扑朔迷离的未来
- bash - 更好的性能替代 egrep
- python - 如何从 GraphQL 服务器获取平面数组作为响应
- c - 未找到使用 C SDK for IBM Watson 的主题的回调