首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法用Tkinter创建透明窗口?

有没有办法用Tkinter创建透明窗口?
EN

Stack Overflow用户
提问于 2013-08-23 04:14:36
回答 2查看 29.9K关注 0票数 21

最终,我试图用Python使用Tkinter模块创建“形状奇特的窗口”。但现在,我会满足于能够使背景透明,同时保持子部件完全可见。

我知道这是用wxPython和其他一些模块完成的,但是我想知道Tkinter的局限性。

Tkinter能创造一个清晰的画布或框架吗?它可以在没有画布或框架的情况下打包UI元素吗?单个UI元素是否是透明的?

它能否将鼠标单击位置传回给系统,以便处理Z堆栈中它下面的任何窗口?

EN

Stack Overflow用户

发布于 2019-10-14 17:34:08

截至2019年末的摘要:

在TCL/TK版本8.6中,alphafullscreentopmost窗口属性可以在所有平台(Windows、Mac和Linux)上工作:

https://www.tcl.tk/man/tcl8.6/TkCmd/wm.htm#M9

手册的早期版本指出,以前存在平台差异(只有一些平台支持这3个属性)。但是,只要您使用最新的TCL/TK,您就可以保证所有这些属性都能在所有平台上工作!

LINUX上仍然存在平台怪癖,因为每个窗口属性特性都依赖于操作系统的底层窗口管理器(在Mac和windows上它们总是能够实现的,但是在Linux上有大量不同的窗口管理器/组合器,并不是所有的窗口都支持透明窗口等等)。它说,如果不支持透明性,alpha属性将保留在1.0中,如果您稍后尝试再次读取它。不过,页面还注意到,在Linux (X11)上,属性是异步更新的,这意味着您不能信任所读取的值(如果更改alpha,然后立即尝试读取它,仍然会读取旧值,因此无法使用该方法检查alpha在Linux上是否已成功更改)。

至于其他的答案,您首先需要在Linux上使用root.wait_visibility(root)来确保窗口在设置alpha属性之前在屏幕上是可见的.我不知道,因为我没有Linux机器来检查。但是我非常怀疑它是否还需要,因为官方手册上说alpha是支持的,并且没有提到命令是必要的。不管是哪种方式,添加wait_visibility技巧也没什么害处.它只是一个命令,它运行一个非常简短的事件循环,直到实际窗口出现在用户的屏幕上。因此,在所有属性设置之前添加该命令可能仍然是个好主意。特别是因为它已经被证明可以帮助alpha在旧的TCL/TK版本的Linux上工作!PS:您不需要(root)参数,应该键入root.wait_visibility(),这意味着“等待self (在本例中是根,因为我们调用了根对象上的命令)”。

更新:

丹尼尔在下面的评论告诉我,root.wait_visibility()仍然是必要的Ubuntu19.10。尽管他没有指定Python、TCL/TK或TkInter版本,但这些版本在他的系统中可能已经过时了。无论哪种方式,似乎总是包含该命令以实现向后兼容性是一种更安全的选择!

票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18394597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档