强制 Tkinter 窗口保持在 Windows 10 全屏模式顶部

7
我有一个Tkinter窗口,我需要它始终在其他所有窗口之上 - 包括全屏窗口。

我尝试过以下方法:

root.attributes('-topmost',True) 主循环之前 - 无效

self.root.wm_attributes(“-topmost”,True) 在类中 - 无效

root.overrideredirect(True) 主循环之前 - 仅适用于Linux

root.lift() 主循环之前 - 无效

最后,我设置了root.lift()来重复调用:

class TestingGUI:
    def __init__(self, root):
        self.root = root
        self.EnsureTop()

    def EnsureTop(self):
        root.lift()
        root.after(5000, self.EnsureTop)`

这种方法可以成功将窗口置于我手动设置为“总在最前”(例如使用Dexpot)的任何其他窗口之上,但重要的是它无法用于全屏应用程序。

具体来说,我需要在游戏中显示它,因为它是一个游戏内音乐播放器。如果需要,我可以接受某些命令需被重复使用以确保窗口再次置于顶部的解决方案。


2
https://blogs.msdn.microsoft.com/oldnewthing/20110310-00/?p=11253 - TessellatingHeckler
@TessellatingHeckler 我不需要我的应用程序在每种可能的情况下都处于顶部,只需要针对一小部分应用程序(Steam游戏)。我相信他们不会想要玩猫捉老鼠的游戏来保持在最上面。 - heidi
@linusg 你还没有解释Tkinter有什么不理想的地方。 - heidi
很久以前,我曾经尝试在全屏应用程序上绘制自定义HUD的想法。我没有走得很远,但在研究过程中,我发现了这篇文章:使用代理DLL拦截DirectX调用。也许对你有用。 - Kevin
@linusg 如果只是为了外观,那么极简主义的方法对我来说就足够了。在这种情况下,我不需要它看起来漂亮。 - heidi
显示剩余13条评论
1个回答

2

正如TessellatingHeckler在评论中指出的那样,无法确保窗口始终位于另一个全屏窗口之上。我通过循环使用root.lift()并要求用户在无边框窗口中运行其应用程序来解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接