我正在尝试创建一个具有一定透明度的界面。我知道这应该很简单,但我面临着一个令人困惑的错误。
如果我在终端中运行以下代码:
import tkinter as tk
root = tk.Tk()
root.geometry("400x400")
root.attributes("-alpha", 0.5)
root.mainloop()
它工作正常,并且窗口按照我要求的尺寸和透明度完美创建。但是,如果我运行这样的脚本(在相同的环境中):
import tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
root.geometry("400x400")
root.attributes("-alpha", 0.5)
root.mainloop()
这不起作用。尺寸将应用于新窗口,但不应用于透明度。
我尝试了
wm_attributes
和attributes
。运行时两者都不起作用python script.py
。
我疯了吗?为什么行为上有差异?
环境相同;我使用的是 Python
3.13
,不涉及其他依赖项。我正在使用 Ubuntu 22.04
使用 x11
。
folder
git status
environment
laptop battery
所以,多亏了评论,我终于找到了答案。当设置像
-alpha
这样的属性时,一些窗口管理器会延迟应用它们,直到窗口完全实现并显示。通过在 root.update_idletasks()
之前添加 root.attributes("-alpha", 0.5)
,我的脚本现在的行为就像终端一样。
现在更新的代码是:
import tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
root.geometry("400x400")
root.update_idletasks()
root.attributes("-alpha", 0.5)
root.mainloop()
感谢您的帮助!我将答案留在这里,以防将来有人遇到同样的问题。