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

And*_*rew 5 python windows graphics subprocess pyglet

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

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

import pyglet

pyglet.window.Window()
pyglet.app.run() 
Run Code Online (Sandbox Code Playgroud)

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

Yau*_*ich 1

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

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

延迟窃取焦点

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

import pyglet

w = pyglet.window.Window()
w.set_visible(False)
pyglet.app.run() 
Run Code Online (Sandbox Code Playgroud)

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

  1. 启动您的应用程序而不显示窗口
  2. 通过获取当前活动窗口的句柄/id 找到其焦点
  3. 显示你的窗口
  4. 将焦点返回到上一个窗口

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