如何让 Python 窗口以“始终在最前面”的方式运行?

2024-11-11 08:26:00
admin
原创
215
摘要:问题描述:我正在用 Python 运行一个小程序,它会启动一个小窗口,该窗口需要保持在所有其他窗口的顶部。我相信这是操作系统特有的,在 GNU-Linux 和 GNOME 中如何实现?[更新 - Windows 解决方案]太棒了,我想我让它工作了。我在 Vista 64 位 Eclipse 中使用 Pytho...

问题描述:

我正在用 Python 运行一个小程序,它会启动一个小窗口,该窗口需要保持在所有其他窗口的顶部。我相信这是操作系统特有的,在 GNU-Linux 和 GNOME 中如何实现?

[更新 - Windows 解决方案]

太棒了,我想我让它工作了。我在 Vista 64 位 Eclipse 中使用 Python 2.5.4 和 Pygame 1.9.1。因此,这是针对 Windows 系统的。该SetWindowPos函数记录在这里。我将在我的解释中引用它。

进口:

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

-1是我们的hWndInsertAfter

MSDN 网站表示:

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

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

x和指定y要设置的窗口的新坐标。我希望在调用该函数时窗口保持在当前位置SetWindowPos。唉,我找不到一种方法轻松地将当前窗口 (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)的帮助。


解决方案 1:

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


gtk.Window.set_keep_above

正如前面提到的,是否尊重此设置取决于窗口管理器。

编辑以包含 SDL 特定内容Pygame 使用 SDL 进行显示工作,但显然与窗口工具包
配合不佳。此处讨论了可以放在顶部的 SDL 窗口。

解决方案 2:

我确实不太了解 Python,但谷歌搜索“pygtk always on top”给了我这个:

http://www.mail-archive.com/pygtk@daa.com.au/msg01370.html​​

那里发布的解决方案是:

transient.set_transient_for(main_window)

您可能还想搜索“x11 始终在最上面”之类的内容。其基本概念似乎是您向窗口管理器发出“提示”,让其将该窗口保持在其他窗口之上。但是,窗口管理器可以自由地做任何它想做的事情。

在使用 Fluxbox 之类的窗口管理器时,我也看到了层的概念,因此也许有办法改变窗口出现的层。

解决方案 3:

我试图找出类似的问题,并使用 Pmw 模块找到了此解决方案

http://www.java2s.com/Code/Python/GUI-Pmw/Showglobalmodaldialog.htm

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用