Tkinter 使用终端和脚本对 alpha 进行不同的行为

问题描述 投票:0回答:1

我正在尝试创建一个具有一定透明度的界面。我知道这应该很简单,但我面临着一个令人困惑的错误。

如果我在终端中运行以下代码:

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


编辑:

这是我在同一环境中运行的证据。 enter image description here 这样终端就清晰了

folder
git status
environment
laptop battery

python tkinter
1个回答
0
投票

所以,多亏了评论,我终于找到了答案。当设置像

-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()

感谢您的帮助!我将答案留在这里,以防将来有人遇到同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.