2009-09-27 2036 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。