2010-07-27 10 views
12

estoy haciendo un juego que tiene que ser capaz de aparecer elementos de interfaz gráfica de usuario dentro de una superficie de pygame. This cuestión no es lo que quiero porque wxPython va alrededor de la superficie SDL, no dentro de ella. Hasta ahora sólo he visto ocemp, pgu y GooeyPy en este espacio del problema.¿Qué gui toolkit debería usar con Pygame?

  • Ocemp es enorme y de aspecto agresivo. Menciona Python 2.3 y el archivo más reciente que encontré en un vistazo rápido de la cesión temporal cvs tenía 2 años.
  • No pude hacer que GooeyPy funcione (aunque no lo intenté mucho, los huevos y Debian no son amigos) y v0.2 se actualizó por última vez en febrero de 2009.
  • He estado trabajando con pgu , pero parece estar sin mantenimiento (última actualización 11/2009 y mantenedor original, abandonado) y que está empezando a mostrar su edad. Utiliza clases de estilo antiguo y arroja excepciones de cadena.

Así que mi pregunta para usted, entonces, es esta: ¿Qué gui toolkit debería usar para hacer que botones que se pueden hacer clic aparezcan en sus aplicaciones de pygame? ¿Hay alguno en desarrollo activo? Todavía se mantiene

Editar, September 2011

Parece que PGU. Los últimos commits son de hace 4 días.

Respuesta

2

No estoy al tanto de cualquier material pygame interfaz gráfica de usuario, pero no debería ser muy difícil de rodar su propia (y bueno, tal vez lo hacen de código abierto!)

Si acaba de hacer unos pocos botones simples que podrían usar GIMP o Photoshop o cualquier otra cosa que hacer dos (o tres) imágenes - una arriba, abajo y posible botón activable, entonces lo que escribe su propio bucle de eventos/manejador que hacer algo como esto:

  1. Obtener la posición del mouse
  2. ¿Está el mouse sobre alguno de los botones (y no se presiona ningún botón)?
  3. Mostrar imagen contextual
  4. ¿El mouse está sobre un botón y se hace clic en el botón del mouse?
  5. caso de incendio asociado a ese botón
  6. Ver 1

que es un poco simplificada, pero debería al menos darle un punto de partida (si nadie más tiene ninguna biblioteca GUI pygame)

+0

Esto es lo que estaba tratando de evitar. Prefiero tomar una biblioteca existente como pgu (que tiene licencia LGPL) y actualizarla. Son 40 archivos fuente (sin contar la documentación) y aproximadamente 7.000 líneas de código Python. – nmichaels

+0

Eso también es posible, nunca he usado pgu, así que no tengo idea de lo avanzado que está, pero si ya hace gran parte del trabajo inicial, tiene todos los motivos para continuar y actualizarlo. Asumiendo que esas 7,000 líneas son buenas líneas, de todos modos;) –

+0

Sí, estoy pensando que puedo hacer eso, suponiendo que StackOverflow no agregue ningún dato mágico a la ecuación. – nmichaels

2

A pesar de ser viejo, realmente no tienes que tener una biblioteca de interfaz gráfica para eso, solo usas sprites. Para las etiquetas tomarías un sprite y le daría la fuente para renderizar y tal. Para los botones, hereda la etiqueta y agrega un estado activo para detectar cambios y provocar que ocurra algo más. Y una rueda de desplazamiento funciona igual que un botón y sólo cambia una etiqueta o algo de valor que mas

0

Creé una función que puede usar dentro de pygame sin importar ninguna biblioteca adicional.

def gui(x1, y1, x2, y2, button): 
    mouseX, mouseY = pygame.mouse.get_pos() 
    if mouseX >= x1 and mouseX <= x2 and mouseY >= y1 and mouseY <= y2: 
     if button: 
      return True 
     else: 
      return False 
    else: 
     return False 

Llamas a la función como tal (estoy usando un menú como ejemplo).

topCornerX = #X coordinate of top right corner 
topCornerY = #Y coordinate of top right corner 
bottomCornerX = #X coordinate of bottom left corner 
bottomCornerY = #Y coordinate of bottom left corner 

while menu: 
    for event in pygame.event.get(): 
     mouseLeft, mouseMiddle, mouseRight = pygame.mouse.get_pressed() 
     if gui(topCornerX, topCornerY, bottomCornerX, bottomCornerY, '''mouseLeft, mouseMiddle, or mouseRight''') 
      menu = False 

Luego continuará con su salida.

Esto funciona tomando las coordenadas de un rectángulo y comparando la posición del mouse con el interior del rectángulo y es True si hacen clic en el botón correcto y están dentro del rectángulo. Espero que esto ayude.