从 Linux 上的窗口管理来看(至少在使用 Gnome 和 Compiz 的 Ubuntu 上),窗口是在堆栈中组织的。切换到焦点窗口以外的窗口会将前者置于堆栈顶部,位于后者的正上方。
那么理论上是否可以告诉 WM 升高或降低该堆栈中的窗口,并将它们升高到最顶层或降低到最底层?
如果是这样,Python XLib 能够做到这一点吗?有没有WM已经有这个功能了?
答案1
是的,窗户是堆叠排列的,可以升高和降低,或者移至顶部或底部。在某些窗口管理器中,它们甚至可以停留在顶部或“粘贴”到所有窗格(也称为工作区)。
看看send_event()
方法以及相关的 X Window 系统文档以获取更多信息,但是,是的,您应该能够做到这一点。您可能需要查看 (1) 的输出,xev
以获取有关需要更改的内容的更多帮助(从正在运行的 X 服务器 POV)。
如果这是您自己的窗口(例如在 Tkinter 中),请查看 WM 操作。Tkinter 类中已经有lower()
和方法。检查您的图书馆的文档以了解具体信息。raise()
TopLevel
答案2
是的,窗口管理器可以升高和降低窗口。事实上,窗口管理器通常负责降低、升高、移动、调整大小、聚焦和一般管理窗口。
用于降低和升高车窗的 X 库函数是XRaiseWindow
和XLowerWindow
。还有更多的功能可以作用堆叠顺序。它们似乎在 Python Xlib 中不可用,但您可以借助 ctypes 轻松访问它们。