¿Cómo hacer que la ventana de Python se ejecute como "Siempre arriba"?

Estoy ejecutando un pequeño programa en python que lanza una pequeña ventana que necesita estar encima de todas las demás ventanas. Creo que esto es específico del sistema operativo, ¿cómo se hace en GNU-Linux con GNOME?

[Actualización - Solución para Windows]

Precioso, creo que lo tengo funcionando. Estoy usando Python 2.5.4 con Pygame 1.9.1 en Eclipse en Vista de 64 bits. Por lo tanto, esto es para los sistemas de Windows. losSetWindowPos la función está documentadaaquí. Me referiré a esto en mi explicación.

Importaciones:

from ctypes import windll

Luego configuré una variable que llama a "SetWindowPos" en user32:

SetWindowPos = windll.user32.SetWindowPos

Ahora, digamos que acabo de hacer una ventana:

screen = pygame.display.set_mode((100,100), pygame.NOFRAME)

La siguiente línea es la clave. Esto establece la ventana para estar encima de otras ventanas.

SetWindowPos(pygame.display.get_wm_info()['window'], -1, x, y, 0, 0, 0x0001)

Básicamente, usted suministra lahWnd(Manejador de ventana) con el ID de ventana devuelto de una llamada adisplay.get_wm_info(). Ahora la función puede editar la ventana que acaba de inicializar.

los-1 es nuestrohWndInsertAfter.

El sitio de MSDN dice:

Una ventana se puede convertir en una ventana superior ya sea configurando el parámetro hWndInsertAfter en HWND_TOPMOST y asegurándose de que el indicador SWP_NOZORDER no esté establecido, o configurando la posición de una ventana en el orden Z para que esté por encima de cualquier ventana superior existente. Cuando una ventana no superior se hace arriba, sus ventanas propias también se hacen arriba. Sus dueños, sin embargo, no son cambiados.

Entonces el-1 se asegura de que la ventana esté por encima de cualquier otra ventana superior, pero esto puede no funcionar en todos los casos. Tal vez un -2 le gana a un -1? Actualmente funciona para mí. :)

losx yy Especifique las nuevas coordenadas para la ventana que se está configurando. Quería que la ventana permaneciera en su posición actual cuando elSetWindowPos La función fue llamada en él. Por desgracia, no pude encontrar una manera de pasar fácilmente la posición de la ventana actual (x, y) a la función. Pude encontrar una solución, pero supongo que no debería introducir un tema nuevo en esta pregunta.

los0, 0, se supone que especifican el nuevo ancho y alto de la ventana, en píxeles. Bueno, esa funcionalidad ya está en tupygame.display.set_mode() función, así que los dejé en 0. La0x0001 Ignora estos parámetros.

0x0001 corresponde a SWP_NOSIZE y es mi único uFlag. Una lista de todos los uFlags disponibles están en la página de documentación provista. Algunas de sus representaciones hexadecimales son las siguientes:

SWP_NOSIZE = 0x0001SWP_NOMOVE = 0x0002SWP_NOZORDER = 0x0004SWP_NOREDRAW = 0x0008SWP_NOACTIVATE = 0x0010SWP_FRAMECHANGED = 0x0020SWP_SHOWWINDOW = 0x0040SWP_HIDEWINDOW = 0x0080SWP_NOCOPYBITS = 0x0100SWP_NOOWNERZORDER = 0x0200SWP_NOSENDCHANGING = 0x0400

¡Eso debería ser! ¡Espero que funcione para ti!

Gracias a John Popplewell en [email protected] por su ayuda.

Respuestas a la pregunta(3)

Su respuesta a la pregunta