打开一个pyglet窗口而不需要聚焦

时间:2012-11-30 16:51:15

标签: python windows graphics subprocess pyglet

我的python应用程序启动一个创建pyglet窗口的子进程。当pyglet窗口打开时,它位于所有其他窗口的前面,并且需要键盘焦点。 我希望我的pyglet窗口在后台打开,而不是焦点。这可能吗?

我正在使用的代码的简化版本:

import pyglet

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

我正在使用Windows 7,以防万一。

2 个答案:

答案 0 :(得分:1)

我认为这可能比你的应用程序更像是一个Windows /窗口管理器问题 - 像http://pcsupport.about.com/od/windowsxp/ht/stealingfocus02.htm这样的东西有帮助吗?

答案 1 :(得分:1)

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

pyglet 不提供特定于操作系统的窗口控件。因此,很可能您将不得不使用特殊技巧来快速解决这些问题,或尝试使用Windows API和/或COM等扩展程序来解决pywin32,以便通过任务栏应用程序堆栈列出来反向窃取焦点。您也可以尝试创建自己的窗口(容器 - 您可以操作) - 以便将其上下文委托给pyglet。

延迟窃取焦点

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

import pyglet

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

因此,如果您不想使用窗口上下文的委派,您可以执行以下操作:

  1. 启动您的应用程序,不显示窗口
  2. 通过获取其句柄/ id
  3. 找到当前活动窗口的焦点
  4. 显示您的窗口
  5. 将重点放回上一个窗口
  6. 以上假设使用Windows API。我认为MSDN有关于焦点改变的例子。如果你知道你当前窗口的PID(主应用程序),这应该简化第2步。