【问题标题】:Open a pyglet window without taking focus在不获取焦点的情况下打开一个 pyglet 窗口
【发布时间】:2012-11-18 22:15:24
【问题描述】:

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

我正在使用的代码的精简版:

import pyglet

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

我使用的是 Windows 7,以防万一。

【问题讨论】:

  • 再想一想,你确实遇到了一个奇怪的情况,即在没有输入的情况下弹出 pyglet 窗口。也许您实际上需要学习如何在更大的应用程序中嵌入 pyglet 小程序的 OpenGL 上下文?

标签: python windows graphics subprocess pyglet


【解决方案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 有关于焦点更改的示例。如果您知道当前窗口(主应用程序)的 PI​​D,这应该简化第 2 步。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多