¿Cuál es la mejor manera de agregar una GUI a una aplicación de Pygame?

¿Hay alguna GUI buena que admita las superficies de Pygame como un widget dentro de la aplicación?

Si esto no es posible o práctico, ¿qué conjunto de herramientas GUI tiene el mejor componente de gráficos? Estoy buscando mantener el procesamiento rápido hecho posible por un envoltorio SDL.

Aquí tiene una explicación sobre cómo integrar y hacer interactuar wxPython y Pygame .

En mi opinión, el mejor kit de herramientas GUI es wxPython (un enlace para wxWidgets) que tiene widgets GUI para prácticamente todo, incluido un widget OpenGL y también se ha trabajado con SDL.

No uses wxPython, es muy difícil llegar a trabajar bien con Pygame, como se describe en la sección GUI de la wiki de Pygame.

En primer lugar, pygame se basa en el SDL, lo que significa que solo puede tener una ventana a la vez. Por lo tanto, tratar de implementar múltiples instancias de aplicaciones Gtk, Qt, … que usan pygame, es una imposibilidad. La segunda razón problemática es que esos kits de herramientas usan su propio bucle principal, lo que posiblemente te obliga a canalizar sus eventos a tu instancia de pygame y viceversa. Y, para abreviar, mencionar algunos otros puntos: es imposible dibujar los elementos del kit de herramientas en la ventana de pygame y el modo de pantalla completa SDL / pygame será problemático.

En su lugar, opta por cualquiera de las bibliotecas que figuran en la parte inferior de esa página. Yo uso pgu yo mismo.

Echa un vistazo a Albow , PGU o Ocemp .

Albow y Ocemp no están siendo mantenidos activamente. Peter Rogers mantiene ahora la PGU, y Victor Kam ha convertido la mayor parte de ella a Python 3.

Hay 5 kits de herramientas GUI de pygame que he intentado ejecutar en Python 3: Albow, GooeyPy, PGU, pqGUI y sgc. (No logré que GooeyPy trabajara con Python 3, pero los otros sí lo hicieron).

Corrí cada una de ellas a través de un simple contador de líneas de código http://code.activestate.com/recipes/527746-line-of-code-counter/ para medir sus tamaños:

Estos son los resultados:

 Albow code min=2810, max=4551 (max = 162% of min) Albow\demo min= 453, max= 649 GooeyPy\gooeypy min=2034, max=3941 (max = 194% of min) GooeyPy\examples min= 178, max= 351 pgu\pgu min=2910, max=7047 (max = 242% of min) incl. pgu\pgu\gui min=1678, max=4638 (max = 276% of min) pgu\examples min= 822, max=2527 pqGUI.py min=1586, max=1834 (max = 116% of min) Example.py min= 178, max= 225 sgc (incomplete) min= 889, max=1243 (max = 140% of min) 

(También quería probar poutine, por Shandy Brown, pero no pude encontrarlo).

En cada caso, el número “mínimo” es más representativo del “tamaño” del kit de herramientas, ya que no cuenta con espacios en blanco y comentarios.

Cuando el número “máximo” está muy cerca del número mínimo, significa que no hay mucho espacio en blanco ni muchos comentarios en el código. pqGUI es un ejemplo de eso, porque casi no tiene comentarios, lo que es muy malo, porque (IMO) hace que los widgets de mejor aspecto.

Me gustó pqGUI porque me gusta el aspecto de los widgets que hace, pero no está respaldado ni documentado, y no puedo encontrar al autor.

Solo dos de los cinco se mantienen / desarrollan activamente: PGU y sgc, y sgc es nuevo e incompleto.

Eso hace a PGU el líder claro.

Dave


PS (23/10/2012) – He creado un kit de herramientas GUI propio para PyGame. Se basa en widgets y utiliza eventos de pygame para la comunicación, de modo que se puede colocar fácilmente en un progtwig de pygame existente, sin tomar control del bucle de eventos. Admite formularios, botones, ventanas, cuadros de diálogo y cuadros de diálogo modales y no modales, menús verticales, cuadros de entrada de texto y controles deslizantes (barras de desplazamiento). Maneja con suavidad los controles superpuestos y las formas dentro de las formas.

Sin embargo, en realidad no está completo: carece de algunos controles que es probable que desee, como cuadros de diálogo y tablas de abrir archivos. Los controles que existen se ven bien, pero las características como las barras de título y las barras de desplazamiento tienen un ancho fijo de píxeles, en lugar de un tamaño ajustable. El código está bien comentado, y hay una aplicación de demostración con ejemplos de uso, pero no hay documentación adecuada sobre el uso. Y es pre-beta, así que todo está sujeto a cambios.

Si, a pesar de esas limitaciones, alguien quiere probarlo, contácteme por correo electrónico. Pregunte por “DavesGUI”. Mi dirección de correo electrónico está aquí: http://www.burtonsys.com/email/