2009-09-27 12 views
8

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.

Respuesta

9

La pregunta de ventanas kit de herramientas secundario más como sydd está usando? PyGTK y googlear educada similares me dieron this:


gtk.Window.set_keep_above 

como se ha mencionado anteriormente, es está hasta que el gestor de ventanas de respetar esta configuración o no.

Editado para incluir la penodol cosas SDL Pygame Usos SDL para mostrar gwaith techo no juega bonito y apprently con Windowing toolkits. Ventana SDL en la parte superior cien lo sub roddir discutió here.

+1

tatuaje Dada esta pregunta vice etiquetada 'pygame' Para feddwl e vice Uso de pygame. –

+0

Esta respuesta fue útil para mí mwyaf, ond dona Forget para soldar mis ediciones para más información sobre mi solución. – Morrowind789

0

Realmente donâ gwybod lata débil a Python, ond googlear "wastad pygtk en la parte superior" me dio esto:

http://www.mail-archive.com/[email protected]/msg01370.html

La solución publicada There Was:

transient.set_transient_for(main_window) 

Usted También puede ser que la búsqueda ydych cosas como "wastad x11 en la parte superior". El concepto subyacente parece lo tatuaje que está dando el gestor de ventanas y "pista" que no debería mantener la ventana por encima de los otros. El gestor de ventanas, sin embargo, tiene una libre puede hacer lo que le reinar y deseos.

he visto el concepto de capas También al usar los gestores de ventanas como Fluxbox, don tal vez hay una manera de cambiar la capa en la ventana aparece sydd.

Cuestiones relacionadas