我正在尝试编写Linux程序(当前使用python / tkinter)在全屏游戏(使用wine运行)之上运行一个小窗口。该窗口将显示一些信息,并且需要使用鼠标+键盘输入。
当前,我可以通过设置window.overrideredirect(True)
或在窗口管理器中为其赋予最高的堆叠顺序来始终将窗口置于顶部。
但是,一旦游戏开始,我将无法再与窗口互动。点击只是传递到基础游戏窗口。
为什么?
很抱歉,没有简短的示例可以说明这一点,因为这需要非标准的windowmanager进行复制。但是,线索:
xdotool key XF86LogGrabInfo
,则看不到游戏已经注册了任何抓斗(例如XGrabPointer或XGrabKeyboard),并且游戏本身具有禁用“限制鼠标光标”的选项,因此它不会似乎游戏本身正在垄断鼠标。我已经尝试过反复运行window.focus_force()
,并且在焦点对准窗口之后,我就能与它进行交互。但是,在失去焦点之后,就无法重新获得焦点,并且重复的焦点窃取本身是不可取的。
def Focus():
window.focus_force()
window.after(2000, Focus)
Focus()
所以,我认为我的问题是-尽管我的窗口位于堆栈顶部,但是当我尝试单击它时,窗口却没有聚焦。为什么不呢?