我正在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]對他的幫助。
鑑於紋身這個問題的副標記「pygame的」要feddwlé副使用pygame的。 – 2009-09-27 19:58:53
這個答案對我來說是有幫助的mwyaf,OND唐娜忘記焊接我的編輯對我的解決方案的更多信息。 – Morrowind789 2012-08-10 21:12:23