2009-09-27 114 views
8

我正在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?它目前适用于我。 :)

xy指定了正在设置的窗口的新坐标。我想让窗口保持当前位置,当调用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]对他的帮助。

回答

9

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


gtk.Window.set_keep_above 
如前面是一提的是高达窗口管理这个设定是与否

编辑成包括SDL penodol东西 Pygame的使用SDL显示gwaith屋顶没有发挥好,并用apprently Windowing toolkits。在百强SDL窗口什么roddir子讨论here

+1

鉴于纹身这个问题的副标记“pygame的”要feddwlé副使用pygame的。 – 2009-09-27 19:58:53

+0

这个答案对我来说是有帮助的mwyaf,OND唐娜忘记焊接我的编辑对我的解决方案的更多信息。 – Morrowind789 2012-08-10 21:12:23

0

我真的唐娜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。

相关问题