全屏窗口如何防止其顶部的窗口获得点击或获得焦点?

时间:2019-06-04 19:34:47

标签: tkinter x11 wine

我正在尝试编写Linux程序(当前使用python / tkinter)在全屏游戏(使用wine运行)之上运行一个小窗口。该窗口将显示一些信息,并且需要使用鼠标+键盘输入。

当前,我可以通过设置window.overrideredirect(True)或在窗口管理器中为其赋予最高的堆叠顺序来始终将窗口置于顶部。

但是,一旦游戏开始,我将无法再与窗口互动。点击只是传递到基础游戏窗口。

为什么?

很抱歉,没有简短的示例可以说明这一点,因为这需要非标准的windowmanager进行复制。但是,线索:

  • 在某些情况下,还有一个单独的问题会影响覆盖重定向窗口,使其无法接收输入。这不是我的问题,因为我在使用非overdirectdirect窗口时遇到了同样的麻烦。 Tkinter's overrideredirect prevents certain events in Mac and Linux
  • 如果我使用xdotool key XF86LogGrabInfo,则看不到游戏已经注册了任何抓斗(例如XGrabPointer或XGrabKeyboard),并且游戏本身具有禁用“限制鼠标光标”的选项,因此它不会似乎游戏本身正在垄断鼠标。
  • 我已经尝试过反复运行window.focus_force(),并且在焦点对准窗口之后,我就能与它进行交互。但是,在失去焦点之后,就无法重新获得焦点,并且重复的焦点窃取本身是不可取的。

    def Focus():
        window.focus_force()
        window.after(2000, Focus)
    Focus()
    

所以,我认为我的问题是-尽管我的窗口位于堆栈顶部,但是当我尝试单击它时,窗口却没有聚焦。为什么不呢?

0 个答案:

没有答案