2012-01-10 33 views
5

Busco a una forma en la que los elementos wxPython GUI se pueden añadir en pygame. Si hay una alternativa para resolver el propósito de agregar elementos de la GUI a un pygame, sugiéralo. Estoy teniendo problemas para instalar PGU. Gracias por la ayuda.Adición wxpython en pygame

+0

es sorprendente saber que python no tiene forma de agregar un botón, en Java fue muy sencillo. Por favor, demuéstrame que estoy mal – hershey92

+0

Duplicado de http://stackoverflow.com/questions/8794506/adding-wxpython-gui-elements-in-a-pygame-physics-simulation. Continúe actualizando su pregunta original con más detalles sobre los problemas que está teniendo. –

+0

es posible ya que lo he hecho antes. Aunque desearía que fuera más compatible. wxPython es mucho mejor que cualquier biblioteca GUI de pygame. ¡PGU apesta a lo grande! Ni siquiera te molestes en descargarlo. Es muy limitante para lo que puedes hacer cuando pones pygame en wxpython, aunque en cuanto a GUI, parece decente. – thelost

Respuesta

3

Nop; PUEDE agregar wxWidgets a PyGame. Es trivial agregar diálogos de abrir/guardar, botones, etc. Algunas veces se pone desagradable cuando intentas compartir áreas (como arriba, hay sistemas de ventanas conflictivos), pero definitivamente es factible.

que escribí hace los años siguientes, por lo que es complicado; pero al menos es simple. Debería ayudarlo a comenzar:

class SDLThread: 
    def __init__(self,screen): 
     self.m_bKeepGoing = self.m_bRunning = False 
     self.screen = screen 
     self.color = (255,0,0) 
     self.rect = (10,10,100,100) 
    def Start(self): 
     self.m_bKeepGoing = self.m_bRunning = True 
     thread.start_new_thread(self.Run,()) 
    def Stop(self): 
     self.m_bKeepGoing = False 
    def IsRunning(self): 
     return self.m_bRunning 
    def Run(self): 
     while self.m_bKeepGoing: 
      pass 
##   GetInput() 
##   Draw() 
     self.m_bRunning = False; 
class SDLPanel(wx.Panel): 
    def __init__(self,parent,ID,tplSize): 
     global pygame 
     wx.Panel.__init__(self, parent, ID, size=tplSize) 
     self.Fit() 
     os.environ['SDL_WINDOWID'] = str(self.GetHandle()) 
     os.environ['SDL_VIDEODRIVER'] = 'windib' 
     import pygame 
     pygame.init() 
     icon = pygame.Surface((1,1));icon.set_alpha(0);pygame.display.set_icon(icon) 
     global Surface 
     Surface = pygame.display.set_mode(tplSize) 
     self.thread = SDLThread(Surface) 
     self.thread.Start() 
    def __del__(self): 
     self.thread.Stop() 
+0

gracias esto me dio muchas ideas :) – hershey92

0

No creo que sea posible ya que wxPython (utilizando wxWidgets C++) es un envoltorio alrededor del sistema de gestión de ventanas, depende de las funciones del sistema operativo para dibujar en la pantalla (convierte a las llamadas del sistema correcto según el sistema operativo).

Pygame utiliza SDL y un código simple de sistema de gestión de ventanas, que denomina algunas funciones del sistema operativo sólo para crear la ventana y le dan a SDL para dibujar en ella, como un lienzo.

Una forma es:

  • usando ctypes para hacer C pone en archivos de biblioteca del sistema operativo para dibujar los widgets nativos del sistema, de esta manera usted no está utilizando cualquiera de las funciones de pygame.

otra manera (feo y no estoy seguro si funciona):

  • No sé cómo, pero encontrar una manera de convertir los widgets en objetos de búfer de imagen para utilizarlos como superficies lisas (mapas de bits).

lo que creo que debe hacer:

  • Uso pygame, construir su propia interfaz gráfica de usuario utilizando superficies y eventos de ratón/teclado para controlar o descargar algunos pre-hechos.

  • Pegue con wx, puede construir su GUI fácilmente en el tema nativo del sistema, también puede usar DC (dibujar contextos) para dibujar como pygame, y tal vez (no estoy seguro) incluir contexto pygame en wx como un widget. Puede beneficiarse de que wx tenga su propio controlador de eventos.

Espero que lo ayude de alguna manera.