打开一个不会抢占焦点的pyglet窗口

5
我的Python应用程序启动了一个子进程,创建了一个pyglet窗口。当pyglet窗口打开时,它在所有其他窗口前面,并且获得了键盘焦点。我希望我的pyglet窗口在后台打开,而不是获得焦点。这可能吗?
我使用的代码的简化版本:
import pyglet

pyglet.window.Window()
pyglet.app.run() 

我正在使用 Windows 7,不知道这是否有区别。


重新考虑一下,你似乎有一个奇怪的问题,即弹出pyglet窗口而没有给它输入。也许你实际上需要学习如何在更大的应用程序中嵌入pyglet小应用程序的OpenGL上下文? - Yauhen Yakimovich
2个回答

1

1

反转焦点是特定于操作系统的:

pyglet 不提供特定于操作系统的窗口控制。因此,您很可能需要使用临时技巧来进行快速和肮脏的解决方案,或者尝试使用扩展(如 pywin32)使用 Windows API 和/或 COM 列出任务栏应用程序的堆栈以反转窃取焦点。您还可以尝试首先创建自己的窗口(容器-您可以操纵它),以便将其上下文委派给 pyglet。

延迟窃取焦点

另一方面,如果根据您的程序逻辑,您只想延迟实际显示应用程序,您可以玩弄可见性:

import pyglet

w = pyglet.window.Window()
w.set_visible(False)
pyglet.app.run() 

如果您不想处理窗口上下文的委托,您可以尝试以下操作:

  1. 启动应用程序但不显示窗口
  2. 通过获取其句柄/ID找到当前活动窗口的焦点
  3. 显示您的窗口
  4. 将焦点返回给以前的窗口

以上假设使用Windows API。我认为MSDN有关于焦点更改的示例。如果您知道当前窗口(主应用程序)的PID,则应该可以简化步骤2。


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