¿Cómo crear una GUI personalizada para un progtwig de python?

Quiero crear una GUI para un progtwig de python con un diseño personalizado, tengo una maqueta en Photoshop y estoy buscando una biblioteca que admita temas o cualquier otra biblioteca que pueda hacer el trabajo.

El diseño de mi GUI contiene gradientes, bordes, radio de borde y una barra de título personalizada con botones personalizados para minimizar y cerrar, por ejemplo, consulte el cliente de Github para Windows o cualquier instalador de software de Adobe.

Intenté wxPython, utilicé style=wx.NO_BORDER para eliminar la barra de título y el borde predeterminado agregado por Windows, pero siento que no estoy usando la herramienta adecuada para este trabajo y leí en algún lugar que wxPython es principalmente para un aspecto nativo Las GUI no están diseñadas para este tipo de personalización, así que debería buscar otra cosa.

Encontré una respuesta aquí recomendando el uso de PyQT y QML para hacer una alta personalización en las GUI, pero el archivo comstackdo tiene un tamaño muy grande.

Entonces, ¿qué debo usar para crear una GUI personalizada? Estoy buscando comstackr el progtwig también, así que necesito hacerlo con un tamaño de archivo razonable.

Su enfoque inicial con wxPython está bien, solo necesita un par de más banderas de estilo para su top wx.Frame :

 wx.NO_BORDER ^ wx.SYSTEM_MENU ^ wx.MINIMIZE_BOX ^ wx.MAXIMIZE_BOX ^ wx.CLOSE_BOX 

Lo que no solo eliminará el borde, sino también el menú del sistema y los cuadros de mínimo / máximo / cierre.

Luego pinta el fondo de tu GUI directamente en el área del cliente de tu marco superior. Vea este tutorial : y observe que wx.DeviceContext admite pintar mapas de bits y rellenos de degradado.

Ahora haga sus botones personalizados y wx.MaximizeEvent que wx.MaximizeEvent eventos wx.CloseEvent , wx.IconizeEvent y wx.MaximizeEvent al hacer clic. Colóquelos en su marco personalizado utilizando una posición absoluta o un Sizer . Hecho.

GUI personalizadas con wxPython / wxWidgets

Usted tiene razón al decir que, en general, wxWidgets tiene como objective proporcionar una apariencia nativa por lo general y de manera predeterminada utilizando controles estándar, sin embargo, existe la opción de no hacerlo. Instale wxPython, en una versión reciente , luego instale el paquete Docs & Demos para la misma versión, y luego ejecute la demostración y navegue hasta la pestaña Widgets Genéricos Avanzados y encontrará casi todas las funciones que solicita en el Demo de AUI. Menciona el cierre personalizado, la minimización, etc., lo único que menciona que no se encuentra en esa demostración son los botones de degradado. También encontrará demostraciones de botones degradados y aqua, y una barra de zoom, a la Mac pero independiente de la plataforma. Se adjuntan capturas de pantalla de la demostración de AUI y el paquete de demostración en la barra de zoom:

Captura de pantalla de wxPython AGW AUI:

Captura de pantalla de wxPython AGW AUI

Demo en la barra de zoom:

Barra de zoom

Nota sobre el tamaño de los archivos:

He estado usando wxPython durante varios años y mi proyecto principal actual proporciona una gran cantidad de funcionalidades en 15-20 ejecutables, pero py2exe me ofrece un conjunto de archivos distribuibles que se comprimen a menos de 35 megabytes, incluida la documentación y las bibliotecas redistribuibles. Una persona muy experimentada se me acercó y me exigió saber dónde estaba oculto el rest de mi paquete entregable, ya sea en línea o si lo estaba preinstalando de alguna otra manera, se sorprendió al enterarse de que todo estaba en el único archivo zip

Qt admite dos formas principales de personalizar la apariencia (y la sensación):

  • Estilos : por ejemplo, Oxygen o los estilos nativos como el estilo de Windows o el estilo de Mac. Los estilos son bastante complicados de desarrollar, ya que necesitan interactuar directamente con el sistema operativo subyacente. Probablemente no quieras esto. Además, no creo que los estilos se puedan escribir en Python, pero puedo estar equivocado aquí.

  • Hojas de estilo : estas son hojas de estilo CSS normales aplicadas a su GUI . Estos son muy flexibles, se pueden cambiar en tiempo de ejecución, no necesitan ningún otro código, pueden usar recursos como imágenes y pueden influir o cambiar la mayoría de la representación.
    Esta hoja de estilo, por ejemplo, solo araña la superficie de lo posible …

Tenga en cuenta que muchos usuarios consideran que los estilos de GUI personalizados son disruptivos y / o de errores, ya que normalmente esperan que una aplicación se vea nativa, es decir, como todas las demás aplicaciones. Sin embargo, hay buenas razones para las GUI personalizadas, por ejemplo, con el software de imágenes, a menudo se desean GUI con menos contraste (como Adobe, Blender, etc.) para no perturbar la imagen vista / editada.

La gran ventaja de usar un kit de herramientas ampliamente utilizado como Qt o GTK + y personalizar su apariencia es que la usabilidad es la más preferida, mientras que los kits de herramientas desarrollados para juegos o similares generalmente exponen una usabilidad inferior.

Si quieres algo como la GUI de GitHub, prueba PyGame. La propiedad window.NOFRAME está disponible para eliminar el borde.

Yo recomendaría pyqt4 o pyside. Tiene el desarrollo gui más robusto para python. Ya viene con un puñado de estilos como:

  • Windows
  • Windows XP
  • Windows Vista
  • Motivo
  • CDE
  • Plastique
  • Miradas limpias

Y también puedes crear tus propios estilos. Este enlace es un buen punto de partida: