如何让python窗口以“Always On Top”的方式运行?

2024-03-20

我正在 python 中运行一个小程序,它启动一个小窗口,该窗口需要保持在所有其他窗口之上。我相信这是操作系统特定的,在带有 GNOME 的 GNU-Linux 中是如何完成的?

[更新 - Windows 解决方案]

可爱的,我想我已经成功了。我在 Vista 64 位的 Eclipse 中使用 Python 2.5.4 和 Pygame 1.9.1。因此,这是针对 Windows 系统的。这SetWindowPos函数已记录Here http://msdn.microsoft.com/en-us/library/ms633545%28VS.85%29.aspx。我将在我的解释中提到这一点。

Imports:

from ctypes import windll

然后我设置了一个变量来调用 user32 中的“SetWindowPos”:

SetWindowPos = windll.user32.SetWindowPos

现在,假设我刚刚创建了一个窗口:

screen = pygame.display.set_mode((100,100), pygame.NOFRAME)

下一行是关键。这会将窗口设置在其他窗口之上。

SetWindowPos(pygame.display.get_wm_info()['window'], -1, x, y, 0, 0, 0x0001)

基本上,您提供hWnd(窗口句柄),其中包含调用返回的窗口 IDdisplay.get_wm_info()。现在该函数可以编辑您刚刚初始化的窗口。

The -1 is our hWndInsertAfter.

MSDN 网站说:

通过将 hWndInsertAfter 参数设置为 HWND_TOPMOST 并确保未设置 SWP_NOZORDER 标志,或者通过设置窗口在 Z 顺序中的位置,使其位于任何现有的最顶层窗口之上,可以将窗口设为最顶层窗口。当非最顶层窗口变为最顶层时,其拥有的窗口也变为最顶层。然而,它的所有者没有改变。

So, the -1确保该窗口位于任何其他现有最顶层窗口之上,但这可能并非在所有情况下都有效。也许-2 胜过-1?目前它对我有用。 :)

The x and y指定正在设置的窗口的新坐标。我希望窗口保持在当前位置SetWindowPos函数被调用了。唉,我找不到一种方法可以轻松地将当前窗口 (x,y) 位置传递到函数中。我能够找到解决方法,但假设我不应该在这个问题中引入新主题。

The 0, 0,应该指定窗口的新宽度和高度(以像素为单位)。嗯,这个功能已经在你的pygame.display.set_mode()函数,所以我将它们保留为 0。0x0001忽略这些参数。

0x0001对应于 SWP_NOSIZE 并且是我唯一的 uFlag。所有可用 uFlag 的列表位于提供的文档页面上。它们的一些十六进制表示如下:

  • SWP_NOSIZE = 0x0001
  • SWP_NOMOVE = 0x0002
  • SWP_NOZORDER = 0x0004
  • SWP_NOREDRAW = 0x0008
  • SWP_NOACTIVATE = 0x0010
  • SWP_FRAMECHANGED = 0x0020
  • SWP_SHOWWWINDOW = 0x0040
  • SWP_隐藏窗口 = 0x0080
  • SWP_NOCOPYBITS = 0x0100
  • SWP_NOOWNERZORDER = 0x0200
  • SWP_NOSENDCHANGING = 0x0400

应该是这样!希望对你有帮助!

归功于 John Popplewell,[电子邮件受保护] /cdn-cgi/l/email-protection感谢他的帮助。


问题更像是您使用哪个窗口工具包? PyGTK 和类似的受过教育的谷歌搜索给了我this http://library.gnome.org/devel/pygtk/stable/class-gtkwindow.html#method-gtkwindow--set-keep-above:


gtk.Window.set_keep_above

如前所述,取决于窗口管理器是否尊重此设置。

编辑以包含 SDL 特定内容Pygame 使用 SDL 进行显示工作,但显然不能很好地使用窗口工具包 http://www.pygame.org/wiki/gui。讨论SDL Window可以放在上面here http://www.linuxquestions.org/questions/programming-9/how-to-make-a-sdl-window-always-on-top-188371/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让python窗口以“Always On Top”的方式运行? 的相关文章

随机推荐