当前位置: 首页 > 面试题库 >

如何使python窗口作为“始终在顶部”运行?

郤浩慨
2023-03-14
问题内容

我正在python中运行一个小程序,该程序会启动一个小窗口,该窗口需要保持在所有其他窗口的顶部。我相信这是特定于OS的,如何在带有GNOME的GNU-
Linux中完成?

[ 更新-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?目前适用于我。:)

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

所述0, 0,应该指定窗口的新的宽度和高度,以像素为单位。好的,该功能已经在您的pygame.display.set_mode()函数中了,因此我将其保留为0。0x0001忽略这些参数。

0x0001对应于SWP_NOSIZE,是我唯一的uFlag。提供的文档页面上列出了所有可用的uFlags。其十六进制表示形式如下:

  • 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@johnnypops.demon.co.uk感谢John Popplewell的帮助。


问题答案:

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

gtk.Window.set_keep_above

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

经过编辑以包括SDL特定的内容
Pygame使用SDL进行显示工作,并且显然不能与Windowing工具箱配合使用。SDL
Window可以放在顶部讨论在这里。



 类似资料:
  • 问题内容: 我有一个在控制台窗口中运行的简单Python脚本。 如何确保控制台窗口始终位于顶部,并在可能时调整其大小? 问题答案: 要在cmd窗口中执行此操作,您可能必须调用许多win32调用。 使用win32gui.EnumWindows枚举所有窗口以获取窗口句柄 找到与您的程序运行方式匹配的“窗口标题”。例如,在我的系统上双击.py文件,窗口标题为“ C:\ Python26 \ python

  • 问题内容: 我希望能够“调整” HTML表的演示文稿以添加一个功能:向下滚动页面以使表在屏幕上但标题行不在屏幕上时,我希望标题保留在查看区域的顶部可见。 从概念上讲,这将类似于Excel中的“冻结窗格”功能。但是,HTML页面中可能包含多个表,并且我只希望它在当前处于可见状态的表中发生,只有在处于可见状态时才发生。 注意:我已经看到一种解决方案,其中表数据区域可滚动而标题不滚动。那不是我要找的解决

  • 问题内容: 我创建了一个DialogUtil,它显示不同情况下JOptionPan的数量。有时在我的动作类中,使用空参数调用此方法,如下所示。 在这种情况下,JOptionPane不会出现在窗口顶部。 如何向JOptionPane添加内容以使其始终显示在顶部? 问题答案: 有两个可能的问题 在EDT中调用JOptionPane,然后在屏幕上仅显示工具栏(来自本机OS的标题在屏幕上可见,RootPa

  • 问题内容: 我如何避免滚动页面的其余部分?我考虑过使用和,只是想知道是否有更简单,更用户友好的方法,这样做的最佳实践是什么? 问题答案: 使用的包含您的头,喜欢的东西 在此示例中,当开始时位于下方100px处,但随着用户滚动,它保持原位。当然,不用说,您需要确保有背景,以便当两个s重叠时,其内容实际上是可见的。

  • 问题内容: 在Objective-C for Cocoa Apps中,可以使用这种方式使窗口始终位于顶部吗? 如何用Swift实现相同的目标? 导致构建错误 问题答案: 要更改窗口级别,您不能在viewDidload中执行此操作,因为视图的window属性始终在那里为零,但是可以通过覆盖viewDidAppear方法或IBAction方法来实现: 斯威夫特1 迅捷2 迅捷3 斯威夫特4 最后,他们

  • 我有一个div类,这个类与一个小的JavaScript函数相关联,它将使div显示为全屏。"也就是说,的宽度和高度将是100%”。 因此,高度和宽度不是固定的,它是根据窗口的缩小动态计算的。 在该div下,还有另一个具有ID标头“导航栏”的标头,标头最初相对定位在div.fullscreen-然而,我试图将其定位为固定,当#标头的顶部到达顶部时浏览器窗口。 所以这里是我正在玩的,它切换固定的风格,