2010-07-27 18 views
12

Sto creando un gioco che deve essere in grado di far apparire gli elementi dell'interfaccia grafica all'interno di una superficie pygame. This domanda non è quello che voglio perché wxPython gira intorno alla superficie SDL, non al suo interno. Finora ho visto solo ocemp, pgu e GooeyPy in questo spazio problematico.Che gui toolkit dovrei usare con Pygame?

  • Ocemp è enorme e crufty cercando. Menziona Python 2.3 e il file più recente che ho trovato in una rapida ricerca del repository cvs aveva 2 anni.
  • non ho potuto ottenere GooeyPy al lavoro (anche se non ho provato molto duro, uova e Debian non sono amici) e v0.2 è stato aggiornato nel mese di febbraio del 2009.
  • Ho lavorato con PGU , ma sembra essere non mantenuto (ultimo aggiornamento 11/2009 e manutentore originale lo ha abbandonato) e sta iniziando a mostrare la sua età. Utilizza le classi di vecchio stile e genera eccezioni per le stringhe.

Quindi la mia domanda per voi, SO, è questa: quale gui toolkit dovrei usare per far apparire pulsanti abbastanza cliccabili nelle vostre applicazioni pygame? Ce ne sono in sviluppo attivo?

Modifica, settembre 2011

Sembra PGU è ancora in fase di mantenimento. Gli ultimi commit provengono da 4 giorni fa.

risposta

2

Io non sono a conoscenza di alcuna roba pygame gui, ma non dovrebbe essere terribilmente difficile da rotolare il proprio (e hey, forse rendono open source!)

Se stai solo facendo un paio di semplici pulsanti che potresti usare GIMP o Photoshop o qualcos'altro per creare due (o tre) immagini - un pulsante su, giù e possibile al passaggio del mouse, quindi scrivi il tuo loop/gestore di eventi che farebbe qualcosa del genere:

  1. Ottieni la posizione del mouse
  2. Il mouse su uno qualsiasi dei pulsanti (e nessun pulsante è premuto)?
  3. Visualizzazione hover image
  4. È il mouse sopra un pulsante e un pulsante del mouse è selezionato?
  5. evento Fuoco associata a quel pulsante
  6. Vedi 1

Questo è un po 'semplificato, ma dovrebbe almeno dare un punto di partenza (se nessun altro ha le librerie Pygame GUI)

+0

Questo è quello che stavo cercando di evitare. Preferirei prendere una libreria esistente come pgu (che è concessa in licenza LGPL) e aggiornarla. Sono 40 file sorgenti (senza contare la documentazione) e circa 7000 linee di codice Python. – nmichaels

+0

Questo è anche possibile - Non ho mai usato pgu quindi non ho idea di quanto sia avanzato - ma se già fa molto del lavoro iniziale, hai tutte le ragioni per procedere e aggiornarlo. Supponendo che quelle 7.000 linee siano buone linee, comunque) –

+0

Sì, penso che potrei farlo, supponendo che StackOverflow non aggiunga alcun dato magico all'equazione. – nmichaels

2

Nonostante questo sia vecchio, non è necessario disporre di una libreria GUI, basta usare gli sprite. Per le etichette si dovrebbe prendere uno sprite e dargli il font da renderizzare e così via. Per i pulsanti eredita l'etichetta e aggiunge uno stato attivo per rilevare le modifiche e causare l'accadimento di qualcos'altro. E uno scroller funziona come un pulsante e cambia solo un'etichetta o qualcosa di valore elses

0

Ho creato una funzione che è possibile utilizzare all'interno di pygame senza importare alcuna libreria aggiuntiva.

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 

Si chiama la funzione in questo modo (sto utilizzando un menu come esempio).

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 

Quindi si continua con l'output.

Questo funziona prendendo le coordinate di un rettangolo e confrontando la posizione del mouse all'interno del rettangolo ed è Vero se fa clic sul pulsante corretto e si trova all'interno del rettangolo. Spero che questo ti aiuti.