如何使python窗口作为“始终在最前面”运行?
我正在python中运行一个小程序,它启动一个小窗口,需要保留在所有其他窗口之上。我相信这是特定于操作系统的,GNU-Linux在GNOME中是如何完成的?如何使python窗口作为“始终在最前面”运行?
[更新 - 解决方案适用于Windows]
可爱,我想我得到它的工作。我在Vista 64位版本的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
(窗口句柄)与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。提供的文档页面上列出了所有可用的uFlags。一些欧盟十六进制表示如下:
- SWP_NOSIZE = 0×0001
- SWP_NOMOVE = 0×0002
- SWP_NOZORDER = 0x0004
- SWP_NOREDRAW = 0×0008
- SWP_NOACTIVATE = 0×0010
- SWP_FRAMECHANGED = 0×0020
- SWP_SHOWWINDOW =即0x0040
- SWP_HIDEW INDOW = 0x0080 = 0100
- SWP_NOCOPYBITS = 0200
- SWP_NOOWNERZORDER =的0x0400
- SWP_NOSENDCHANGING
这不应该是什么!希望对你有用!
感谢约翰Popplewell到[email protected]对他的帮助。
问题窗口工具包子更像sydd您使用的? PyGTK的和受过教育的类似谷歌搜索给了我this:
gtk.Window.set_keep_above
如前面是一提的是高达窗口管理这个设定是与否
。
编辑成包括SDL penodol东西 Pygame的使用SDL显示gwaith屋顶没有发挥好,并用apprently Windowing toolkits。在百强SDL窗口什么roddir子讨论here。
我真的唐娜gwybod隐隐可以到Python,OND谷歌搜索给了我这个 “上面的PyGTK wastad”:
http://www.mail-archive.com/[email protected]/msg01370.html
的解决方案张贴有:
transient.set_transient_for(main_window)
你也可能ydych搜索喜欢的东西“在上面X11 wastad”。基本概念似乎什么纹身你给的窗口管理器和“提示”,它不应该保持高于其他窗口。窗口管理器,但是,有一个免费的可以做任何它玄宗和欲望。
我曾见过层的概念使用类似的Fluxbox窗口管理器也要当,不要也许有一种方法来改变窗口的层出现sydd。
要仆人试图ffigur类似的问题,并发现了,该解决方案使用了宝马模块
http://www.java2s.com/Code/Python/GUI-Pmw/Showglobalmodaldialog.htm
鉴于纹身这个问题的副标记“pygame的”要feddwlé副使用pygame的。 – 2009-09-27 19:58:53
这个答案对我来说是有帮助的mwyaf,OND唐娜忘记焊接我的编辑对我的解决方案的更多信息。 – Morrowind789 2012-08-10 21:12:23