gpt4 book ai didi

python - 如何让 python 窗口以 "Always On Top"运行?

转载 作者:IT王子 更新时间:2023-10-29 00:20:18 25 4
gpt4 key购买 nike

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

[更新 - Windows 解决方案]

太棒了,我想我成功了。我在 64 位 Vista 上的 Eclipse 中使用 Python 2.5.4 和 Pygame 1.9.1。因此,这是针对 Windows 系统的。 SetWindowPos 函数已记录 Here .我会在我的解释中提到这一点。

导入:

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(窗口句柄)提供调用 display.get_wm_info() 返回的窗口 ID。现在该函数可以编辑您刚刚初始化的窗口。

-1 是我们的hWndInsertAfter

MSDN 网站说:

A window can be made a topmost window either by setting the hWndInsertAfter parameter to HWND_TOPMOST and ensuring that the SWP_NOZORDER flag is not set, or by setting a window's position in the Z order so that it is above any existing topmost windows. When a non-topmost window is made topmost, its owned windows are also made topmost. Its owners, however, are not changed.

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

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

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_SHOWWINDOW = 0x0040
  • SWP_HIDEWINDOW = 0x0080
  • SWP_NOCOPYBITS = 0x0100
  • SWP_NOOWNERZORDER = 0x0200
  • SWP_NOSENDCHANGING = 0x0400

应该是吧!希望它对你有用!

感谢 John Popplewell 在 john@johnnypops.demon.co.uk 的帮助。

最佳答案

问题更像是您使用的是哪个窗口工具包? PyGTK 和类似的受过教育的谷歌搜索给了我 this :


gtk.Window.set_keep_above

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

经过编辑以包含 SDL 特定内容Pygame 使用 SDL 来做显示工作,显然不能很好地与 Windowing toolkits 一起玩. SDL Window 可以置顶讨论here .

关于python - 如何让 python 窗口以 "Always On Top"运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1482565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com