¿Qué lenguaje de programación es el más fácil y mejor para el diseño de GUI?

No he usado todas las librerías y frameworks de GUI del mundo pero no creo que la mayoría de los lenguajes hagan GUI extremadamente bien de todos modos. En términos de soporte y documentación, no puedes equivocarte con C#, Java o Python y sus respectivos frameworks.

Todo depende de tus necesidades. Usted puede construir una interfaz gráfica de usuario que funcione con Python y tkinter si no le importa cómo se ve su GUI. Tenga en cuenta que hay soluciones que puede hacer para que las aplicaciones tkinter parezcan más modernas, como el uso de imágenes e iconos personalizados siempre que sea posible, etc.

Los buenos programas de interfaz gráfica no son inherentemente fáciles de escribir sin importar el lenguaje en el que estén escritos, así que básicamente puede olvidarse de la parte fácil de su pregunta.

Hoy en día, es probable que utilice algún tipo de editor visual para obtener rápidamente sus componentes en la pantalla, pero puede codificar los diseños usted mismo si está dispuesto a aceptar el reto.

He decidido poner mi juego actual en espera por ahora y he decidido construir un editor de mapas 2D en Java Swing. No va a ser una especie de juguete tonto, va a terminar siendo bastante avanzado, con la mayoría de las características básicas que se pueden esperar de un editor de mapas 2D. Nunca he construido un editor de mapas antes, pero estoy usando otros editores de mapas 2D como inspiración. ¿Por qué estoy usando Swing? Porque voy a usarlo para hacer niveles de juego para los juegos que haga en el futuro que van a ser parte de mi portafolio y pensé que ya que estoy usando java para mis juegos de portafolio, podría usarlo también para mis herramientas. Además, Java swing parece lo suficientemente moderno sin ser demasiado elegante. Justo lo que quiero.

Desde mi experiencia hasta ahora, Java Swing es un real dolor en el culo. ¿Qué hace que sea un dolor de cabeza? Es el hecho de que utiliza muchos tipos diferentes de gestores de diseño, y puedes mezclarlos y combinarlos. Esto parece algo bueno, pero es algo malo porque dependiendo del gestor de diseño que utilices para determinados JPanels y JFrames, algunas funciones de JComponent no funcionan o funcionan, pero tienen un comportamiento variado.

Un ejemplo claro es el uso de BorderLayout en JPanels y JFrames. BorderLayout parece que sólo permite colocar un componente en 5 lugares diferentes dentro de un marco y automáticamente estirará sus componentes para que encajen dentro de los contenedores. Llamar a los métodos de dimensionamiento de los widgets cuando están dentro de un contenedor configurado con BorderLayout es a menudo jodidamente inútil porque el layout simplemente ignora tus peticiones de tamaño. Java no proporciona nada en términos de decirte que tus llamadas a métodos están haciendo una mierda.

Si estás usando el BoxLayout, algunos métodos de dimensionamiento de widgets se tienen en cuenta y realmente dimensionan los widgets correctamente, pero usando los mismos métodos en BorderLayout se asegurará de que no pase nada. Puede ser difícil memorizar lo que un determinado layout permite y tiene en cuenta en términos de métodos JComponent.

Para resumir, depende de tus necesidades. La mayoría de los lenguajes, aparte de los de nivel de sistema, serán algo decentes para la programación de GUI, pero no perfectos. Realmente no creo que sea una buena idea programar una GUI en C hoy en día si no has hecho programación de GUI antes y no tienes realmente una razón para usarla. Básicamente, es una pesadilla en la mayoría de los lenguajes, sólo tienes que elegir tu veneno. Si eliges C para una GUI, probablemente va a terminar siendo más un dolor de cabeza de lo que es actualmente para mí en Java y chico es un dolor de cabeza, dolor de culo, dolor de cojones y todo lo demás.

He encontrado que la combinación de BorderLayouts, JPanels y BoxLayouts tiende a funcionar muy bien, pero predigo que voy a encontrarme con un montón de problemas más adelante cuando necesito componentes y diseños más complejos.