Linux环境下tkinter全屏透明层显示指针位置的不透明问题
解决Linux下Tkinter全屏透明层显示指针位置的问题
在Linux(X11)环境下,直接设置窗口-alpha 0.0会让整个窗口包括子控件完全透明,这就是你看不到内容的原因。要实现窗口背景透明但控件可见的效果,需要用-transparentcolor属性指定一个透明色,让窗口背景使用这个颜色,从而实现透明效果。
修改后的代码如下:
#!/usr/bin/python3 import tkinter as tk from tkinter import ttk def hover(root, lb): x, y = root.winfo_pointerxy() lb['text'] = f"X={x}\nY={y}" # 让标签稍微偏移,避免和指针完全重叠挡住 lb.place(x=x+10, y=y+10) root.after(50, hover, root, lb) # 提高刷新频率,让位置更实时 def createGlass(): root = tk.Tk() # 指定透明色(选一个不常用的颜色,避免和控件颜色冲突) transparent_color = '#000001' root.wm_attributes('-transparentcolor', transparent_color) root.config(bg=transparent_color) root.wm_attributes('-fullscreen', 1) root.wm_attributes('-topmost', True) # 让窗口始终在最上层 root.wm_overrideredirect(True) # 去掉窗口边框和标题栏 # 创建标签,设置背景色避免透明,字体颜色设为醒目颜色 lb = ttk.Label(root, text="", foreground='white', background='#333333', padding=5) hover(root, lb) root.mainloop() if __name__ == '__main__': createGlass()
关键改动说明:
- 替换
-alpha 0.0为-transparentcolor:在X11环境下,Tkinter支持指定某个颜色为透明色,窗口中所有使用该颜色的区域都会透明,而其他颜色的控件会正常显示。 - 设置窗口背景为透明色:确保窗口本身的背景是透明的。
- 添加
-topmost True:保证透明层始终在所有窗口上方,不会被其他窗口遮挡。 - 开启
overrideredirect(True):移除窗口的边框和标题栏,让透明层更贴合需求。 - 调整标签样式:给标签设置背景色和前景色,确保在透明背景上清晰可见,同时稍微偏移位置避免挡住鼠标指针。
- 提高刷新频率:把
after的间隔从200ms改为50ms,让指针位置显示更实时。
内容的提问来源于stack exchange,提问作者user3435121
相关产品推荐
相关产品推荐

