Estoy ejecutando un pequeño programa en python que inicia una pequeña ventana que necesita permanecer encima de todas las otras ventanas. Creo que esto es específico del sistema operativo, ¿cómo se hace en GNU-Linux con GNOME?¿Cómo hacer que la ventana de Python se ejecute como "Siempre Encima"?
[Actualización - Solución para Windows]
precioso, creo que tengo trabajo. Estoy usando Python 2.5.4 con Pygame 1.9.1 en Eclipse en Vista de 64 bits. Por lo tanto, esto es para sistemas de Windows. La función SetWindowPos
está documentada Here. Me referiré a esto en mi explicación.
Importaciones:
from ctypes import windll
Luego establecieron una variable que llama los "SetWindowPos" en user32:
SetWindowPos = windll.user32.SetWindowPos
Ahora, vamos a decir que acabo de hacer una ventana:
screen = pygame.display.set_mode((100,100), pygame.NOFRAME)
La siguiente línea es la clave. Esto establece que la ventana esté encima de otras ventanas.
SetWindowPos(pygame.display.get_wm_info()['window'], -1, x, y, 0, 0, 0x0001)
Básicamente, usted indica el (identificador de ventana) hWnd
con la ventana ID devuelto desde una llamada a display.get_wm_info()
. Ahora la función puede editar la ventana que acaba de inicializar.
El -1
es nuestro hWndInsertAfter
.
El sitio de MSDN dice:
Una ventana se puede hacer una ventana superior, ya sea estableciendo el parámetro hWndInsertAfter a HWND_TOPMOST y la garantía de que la bandera SWP_NOZORDER no está establecido, o mediante el establecimiento de la posición de una ventana en la Z orden para que esté sobre cualquier ventana superior existente. Cuando una ventana que no está en la parte superior se convierte en la más alta, sus ventanas de propiedad también se hacen más altas. Sus dueños, sin embargo, no han cambiado.
Así, el -1
hace que la ventana está por encima de cualquier otra ventana más altas existentes, pero esto puede no funcionar en todos los casos. ¿Tal vez un -2 gana un -1? Actualmente funciona para mí. :)
El x
y y
especifican las nuevas coordenadas para la ventana que se está configurando. Quería que la ventana se mantuviera en su posición actual cuando se llamaba a la función SetWindowPos
. Por desgracia, no pude encontrar una manera de pasar fácilmente la posición actual de la ventana (x, y) a la función. Pude encontrar un trabajo alternativo, pero supongo que no debería introducir un tema nuevo en esta pregunta.
Se supone que el 0, 0,
especifica el nuevo ancho y alto de la ventana, en píxeles. Bueno, esa funcionalidad ya está en su función pygame.display.set_mode()
, así que los dejé en 0. El 0x0001
ignora estos parámetros.
0x0001
corresponde a SWP_NOSIZE y es mi único uFlag. Una lista de todos los uFlags disponibles se encuentra en la página de documentación provista.Algunos de representaciones eu Hex son los siguientes:
- SWP_NOSIZE = 0x0001
- SWP_NOMOVE = 0x0002
- SWP_NOZORDER = 0x0004
- SWP_NOREDRAW = 0x0008
- SWP_NOACTIVATE = 0x0010
- SWP_FRAMECHANGED = 0x0020
- SWP_SHOWWINDOW = 0x0040
- SWP_HIDEW ENTANA = 0x0080 0x0100 =
- SWP_NOCOPYBITS = 0x0200
- SWP_NOOWNERZORDER = 0x0400
- SWP_NOSENDCHANGING
Eso no debería lo que! Espero que funcione para usted!
crédito a John Popplewell a [email protected]~~V~~singular~~3rd por su ayuda.
tatuaje Dada esta pregunta vice etiquetada 'pygame' Para feddwl e vice Uso de pygame. –
Esta respuesta fue útil para mí mwyaf, ond dona Forget para soldar mis ediciones para más información sobre mi solución. – Morrowind789