我最终尝试使用Tkinter模块使用Python创建“形状奇特的窗口”。但是现在我将满足于能够使背景透明,同时保持儿童小部件完全可见。
我知道这是通过wxPython和其他一些模块完成的,但我正在询问Tkinter的限制。
Tkinter可以创建一个清晰的画布或框架吗?它可以在没有画布或框架的情况下打包UI元素吗?单个UI元素可以透明吗?
它可以将鼠标点击位置传递回系统,以便处理Z堆栈中它下面的任何窗口吗?
答案 0 :(得分:16)
选项root.attributes('-alpha', 0.1)
可用于制作透明窗口
from Tkinter import *
root = Tk()
root.attributes('-alpha', 0.3)
root.mainloop()
但是在这种情况下,即使root上的小部件也会继承透明度。
Linux更新(在Ubuntu上测试)
上述代码在Linux机器上不起作用。这是一个适用于Linux的更新。
from tkinter import Tk # or(from Tkinter import Tk) on Python 2.x
root = Tk()
root.wait_visibility(root)
root.wm_attributes('-alpha',0.3)
root.mainloop()
不确定这是否适用于Windows。
答案 1 :(得分:0)
从TCL / TK版本8.6开始,alpha
,fullscreen
和topmost
窗口属性在所有平台(Windows,Mac和Linux)上均有效:
https://www.tcl.tk/man/tcl8.6/TkCmd/wm.htm#M9
该手册的先前版本指出以前是个平台差异(仅某些平台支持这3个属性)。但是,只要您使用最新的TCL / TK,就可以确保所有这些属性都可以在所有平台上使用!
在LINUX上仍然存在平台怪癖,因为每个窗口属性功能都依赖于操作系统的基础窗口管理器(在Mac和Windows上,它们始终能够运行,但是在Linux上,有很多不同的窗口管理器/合成器,而NOT全部支持透明窗口等)。它表示如果不支持透明性,则如果您稍后尝试再次读取,则alpha
属性将保留在1.0
处。但是该页面还指出,在Linux(X11)上,属性是异步更新的,这意味着您无法信任所读取的值(如果您更改了alpha,然后立即尝试读取它,那么您仍然会读取旧值,因此您不能使用该方法来检查Alpha是否已在Linux上成功更改)。
关于其他回答,说您首先需要在Linux上使用root.wait_visibility(root)
来确保在设置alpha
属性之前该窗口在屏幕上可见...我不知道,因为我没有要检查的Linux机器。但是我对此表示非常怀疑,因为官方手册中说支持alpha,并且对该命令没有任何要求。无论哪种方式,都不会增加wait_visibility
技巧……这只是运行非常简短的事件循环的命令,该循环等待直到实际窗口出现在用户的屏幕上。因此,在所有属性设置之前添加该命令可能仍然是一个好主意。特别是因为它已经得到 proved 的帮助,可以帮助Alpha在旧 TCL / TK版本的Linux上运行! PS:您不需要(root)
参数,而应键入root.wait_visibility()
,这意味着“等待self
(在这种情况下为root,因为我们在根对象)”。