如何让Tkinter窗口置于所有其他窗口底层
如何让Tkinter窗口置于所有其他窗口底层
嘿,我完全懂你想让Tkinter窗口乖乖待在所有窗口下面、紧贴桌面的需求~你已经知道怎么用-topmost=True让窗口置顶,但可惜Tkinter确实没有现成的-bottommost属性,不过咱们可以通过各平台的系统API来实现这个效果,下面分平台给你具体方案:
Windows平台
可以借助ctypes调用Windows系统API来调整窗口层级,把窗口放到最底层:
import tkinter as tk import ctypes root = tk.Tk() root.title("底层窗口示例") # 获取Tkinter窗口的系统句柄 hwnd = ctypes.windll.user32.GetParent(root.winfo_id()) # 调用SetWindowPos将窗口置于最底层,同时保持原有大小和位置 ctypes.windll.user32.SetWindowPos( hwnd, ctypes.c_int(1), # HWND_BOTTOM,代表最底层 0, 0, 0, 0, 0x0001 | 0x0002 # SWP_NOSIZE(保持大小)| SWP_NOMOVE(保持位置) ) root.mainloop()
Linux平台(X11环境)
可以用wmctrl命令行工具来设置窗口属性,先确保你的系统已经安装了wmctrl(比如Ubuntu可以用sudo apt install wmctrl安装):
import tkinter as tk import subprocess root = tk.Tk() root.title("底层窗口示例") # 获取窗口的ID win_id = root.winfo_id() # 调用wmctrl给窗口添加"below"属性,让它处于所有窗口底层 subprocess.run(["wmctrl", "-i", "-r", str(win_id), "-b", "add,below"]) root.mainloop()
macOS平台
需要借助pyobjc库调用Cocoa框架的API,先安装依赖:pip install pyobjc
import tkinter as tk from AppKit import NSWindow, NSDesktopWindowLevel root = tk.Tk() root.title("底层窗口示例") # 获取对应的NSWindow对象 win = NSWindow.windowWithWindowNumber_(root.winfo_id()) # 设置窗口层级为桌面层级减1,这样就能让它处于所有窗口下方 win.setWindowLevel_(NSDesktopWindowLevel() - 1) root.mainloop()
总结一下,因为Tkinter本身没有跨平台的“置底”属性,所以只能针对不同操作系统用对应的系统API来实现,上面的代码分别适配了三大主流平台,你可以根据自己的使用环境来选择~
备注:内容来源于stack exchange,提问作者stysan
相关产品推荐
相关产品推荐

