Używam małego programu w pythonie, który uruchamia małe okno, które musi pozostać na szczycie wszystkich innych okien. Wierzę, że jest to specyficzne dla systemu operacyjnego, jak to się robi w GNU-Linuksie z GNOME?Jak ustawić okno Pythona jako "Zawsze na wierzchu"?
[Update - Rozwiązanie dla Windows]
Piękny, myślę, że mam to działa. Używam Python 2.5.4 z Pygame 1.9.1 w Eclipse na Vista 64-bit. Tak jest w przypadku systemów Windows. Funkcja SetWindowPos
jest udokumentowana Here. Odniosę się do tego w moim wyjaśnieniu.
Import:
from ctypes import windll
Potem ustawić zmienną, która nazywa "SetWindowPos" w user32:
SetWindowPos = windll.user32.SetWindowPos
Teraz, powiedzmy, że ja po prostu się okno:
screen = pygame.display.set_mode((100,100), pygame.NOFRAME)
Następna linia jest kluczem. Spowoduje to ustawienie okna na innych oknach.
SetWindowPos(pygame.display.get_wm_info()['window'], -1, x, y, 0, 0, 0x0001)
Zasadniczo, można dostarczyć (uchwyt okna) hWnd
z okna ID zwrócony z wywołania display.get_wm_info()
. Teraz funkcja może edytować właśnie zainicjalizowane okno.
-1
to nasza hWndInsertAfter
.
Witryna MSDN mówi:
okno może być wykonane z najwyższą okno albo przez ustawienie parametru hWndInsertAfter do HWND_TOPMOST i zapewnienie, że flaga SWP_NOZORDER nie jest ustawiony, lub przez ustawienie pozycji oknem w Z. kolejność tak, aby znajdowała się powyżej wszelkich istniejących najwyższych okien. Gdy nie najwyższej klasy okno jest wykonane na najwyższym poziomie, jego własne okna są również wykonane z najwyższej półki. Jego właściciele jednak nie są zmienione.
Tak, -1
pilnuje okno jest ponad wszelkimi innymi istniejącymi najwyższych okien, ale to może nie działać we wszystkich przypadkach. Może -2 wygrywa z -1? Obecnie działa dla mnie. :)
Parametry x
i y
określają nowe współrzędne dla ustawianego okna. Chciałem, aby okno pozostało w aktualnej pozycji, gdy wywołano na nim funkcję SetWindowPos
. Niestety, nie mogłem znaleźć sposobu na łatwe przekazanie aktualnej pozycji okna (x, y) do funkcji. Udało mi się znaleźć pracę, ale zakładam, że nie powinienem wprowadzać nowego tematu na to pytanie.
Parametry 0, 0,
określają nową szerokość i wysokość okna w pikselach. Ta funkcja jest już w twojej funkcji pygame.display.set_mode()
, więc zostawiłem je na 0. 0x0001
ignoruje te parametry.
0x0001
odpowiada SWP_NOSIZE i jest moim jedynym uFlag. Lista wszystkich dostępnych uFlag znajduje się na dostarczonej stronie dokumentacji.Niektóre reprezentacje eu Hex są następujące:
- SWP_NOSIZE = 0x0001
- SWP_NOMOVE = 0x0002
- SWP_NOZORDER = 0x0004
- SWP_NOREDRAW = 0x0008
- SWP_NOACTIVATE = 0x0010
- SWP_FRAMECHANGED = 0x0020
- SWP_SHOWWINDOW = 0x0040
- SWP_HIDEW INDOW = 0x0080 = 0x0100
- SWP_NOCOPYBITS = 0x0200
- SWP_NOOWNERZORDER = 0x0400
- SWP_NOSENDCHANGING
To shouldnt co to! Nadzieję, że pracuje dla Ciebie!
Credit John Popplewell do [email protected] za pomoc.
Biorąc tatuaż to pytanie wice Tagged 'Pygame' to feddwl e imadło Korzystanie Pygame. –
Ta odpowiedź była pomocna dla mnie mwyaf, OND dona Zapomnij spawać moje edycje Więcej informacji na temat mojego rozwiązania. – Morrowind789