mejor - Kit de herramientas gui multiplataforma para implementar aplicaciones Python
interfaz grafica python tkinter (5)
Basado en: http://www.reddit.com/r/Python/comments/7v5ra/whats_your_favorite_gui_toolkit_and_why/
Méritos:
1 - facilidad de diseño / integración - curva de aprendizaje
2 - soporte / disponibilidad para * nix, Windows, Mac, puntos extra para l & f nativo, soporte para dispositivos móviles o web
3 - API pythonic
4 - calidad de la documentación: quiero hacer algo un poco más complicado, ¿y ahora qué?
5 - embalaje liviano por lo que no es necesario incluir un instalador completo (py2exe, py2app idealmente trabajaría como está y no generaría un archivo de MBs gazillion)
6 - licenciamiento
7 - ¿otros? (especificar)
Contendientes:
1 - tkinter, como se admite actualmente (a partir de 2.6, 3.0)
2 - biblioteca pyttk
3 - pyGTK
4 - pyQt
5 - wxPython
6 - HTML-CGI a través del framework basado en Python (Django, Turbogears, web.py, Pylons ...) o Pegar
7 - ¿otros? (especificar)
Definitivamente lo agradecería si alguien supiera algo mejor de lo que comúnmente se discute; Veo que tengo dolores de cabeza para encontrar algo apropiado ...
Qt es genial, pero PyQt no parece tener los mismos recursos de desarrollo. Parece tener una forma inteligente de generar enlaces, pero no está completa (por ejemplo, la terminal PyKDE kpart) y hay una escasez de documentación (como admiten los desarrolladores). La compatibilidad con el diseñador de interfaz de usuario de Qt es agradable.
wxpython: los controles no son tan atractivos, la biblioteca de widgets no es tan grande como KDE.
OpenGL: ni siquiera admite fuentes de forma predeterminada ... pygame está bien, pero opengl es una máquina de estado demasiado molesto (los modelos orientados a objetos evitan que la llamada se ponga en el estado incorrecto).
XUL - idea clara, ojalá funcionó. Sin pyxulrunner tutorial de pyxulrunner no funcionó para mí: primero tuve que agregar la ruta xulrunner / usr / lib a LD_LIBRARY_PATH, y luego tuve problemas con "from xpcom import components" ...
mi lista de deseos para una biblioteca ui sería
- Integración de Python (es decir, utiliza componentes como Unicode, módulos como subprocesamiento y funciones de idioma como cierres)
- buena representación intermedia (como XUL en lugar de generar cientos de líneas que parecen "listbox91.addChild (label28)")
- soporte multiproceso simple (bloqueos automáticos o publicación de eventos, por ejemplo, elt.setText puede invocarse desde cualquier hilo; permitir que el diseñador administre el bloqueo con bloqueos de Python si es necesario)
- también características centradas en el usuario: secuencias de comandos de una secuencia de eventos de IU, capacidad para vincular cualquier cosa (KDE tiene dcop, pero la biblioteca de IU no realiza automáticamente el enlace afaik) e interceptar eventos.
- potencial para una biblioteca estándar grande, fácil de contribuir.
- documentación, aunque si la biblioteca estuviera bien diseñada y generara suficiente interés, esto sería un hecho.
En mi experiencia, html es mucho más fácil de obtener algo bueno que las bibliotecas de UI.
editar - después de trabajar con PyQt 4 por un tiempo, hace el trabajo para UI simples. Actualmente no estoy desarrollando para usuarios finales, por lo que el aspecto no importa. QTextBrowser es muy útil para mostrar tablas HTML básicas y generar enlaces HTML.
No dude en ampliar esta respuesta.
Tkinter
Tkinter es el conjunto de herramientas que viene con python. Eso significa que ya tiene todo lo que necesita para escribir una GUI. Lo que eso también significa es que si elige distribuir su programa, lo más probable es que todos los demás tengan lo que necesitan para ejecutar su programa.
Tkinter es maduro y estable, y es (al menos discutible) bastante fácil de usar. Me pareció más fácil de usar que wxPython, pero obviamente eso es algo subjetivo.
Tkinter tiene una mala reputación por verse feo y desactualizado. Si bien es cierto que es fácil crear GUI feos con Tkinter, también es muy fácil crear GUIs agradables. Tkinter no sostiene tu mano, pero tampoco se interpone en el camino. Tkinter se ve mejor en Mac y Windows ya que usa widgets nativos allí, pero también se ve bien en Linux.
El otro punto sobre el aspecto de Tkinter es que, en su mayor parte, la apariencia no es tan importante como las personas creen. La mayoría de las aplicaciones escritas con toolkits como Tkinter, wxPython, PyQT, etc. son aplicaciones de propósito especial. Para los tipos de aplicaciones para los que se usan estos juegos de herramientas, la usabilidad prevalece. Si el aspecto de la aplicación es importante, es bastante fácil pulir una aplicación Tkinter.
Tkinter tiene algunas características que otros juegos de herramientas no se aproximan. Los rastros variables, las fuentes denominadas, los gestores de geometría (diseño) y la forma en que Tkinter procesa los eventos siguen siendo el estándar con el que se deben juzgar otros kits de herramientas.
En el lado negativo, Tkinter es un envoltorio alrededor de un intérprete Tcl que corre dentro de python. Esto es casi invisible para cualquiera que se desarrolle con Tkinter, pero a veces resulta en mensajes de error que exponen esta arquitectura. Obtendrá un error quejándose de un widget con un nombre como ".1245485.67345" que casi no tendrá sentido para nadie a menos que también esté familiarizado con el funcionamiento de Tcl / tk.
Otro inconveniente es que Tkinter no tiene tantos widgets preconstruidos como wxPython. El widget de árbol jerárquico en Tkinter es un poco débil, por ejemplo, y no hay un widget de tabla incorporado. Por otro lado, los widgets de texto y de lienzo de Tkinter son extremadamente potentes y fáciles de usar. Para la mayoría de los tipos de aplicaciones escribirás; sin embargo, tendrás todo lo que necesites. Simplemente no espere reproducir Microsoft Word o Photoshop con Tkinter.
No sé cuál es la licencia para Tkinter, asumo lo mismo que para Python en general. Tcl / tk tiene una licencia de estilo BSD.
PyQt
Se basa en Qt , un framework de C ++. Es bastante avanzado y tiene algunas buenas herramientas como el Qt Designer para diseñar sus aplicaciones. Sin embargo, debes tener en cuenta que no se siente como Python al 100%, sino cerca de él. La documentation es excelente
Este marco es realmente bueno. Está siendo desarrollado activamente por Trolltech, que es propiedad de Nokia. Los enlaces para Python son desarrollados por Riverbank.
PyQt está disponible bajo la licencia GPL o comercial. El precio de una licencia de PyQt en la orilla del río es de aproximadamente 400 euros por desarrollador.
Qt no solo es una GUI-framework sino que también tiene muchas otras clases, uno puede crear una aplicación simplemente usando clases Qt. (Como SQL, redes, scripts, ...)
Qt solía emular elementos de la GUI en todas las plataformas, pero ahora usa estilos nativos de las plataformas (aunque no son herramientas de GUI nativas): consulte la documentación de Mac OS X y el estilo de Windows XP
El empaquetado es tan simple como ejecutar py2exe o pyInstaller. El contenido de mi aplicación PyQt se ve así en Windows (he usado InnoSetup encima para una instalación adecuada):
pyticroque.exe PyQt4.QtGui.pyd unicodedata.pyd MSVCP71.dll PyQt4._qt.pyd unins000.dat MSVCR71.dll python25.dll unins000.exe PyQt4.QtCore.pyd sip.pyd _socket.pyd
QT viene con un diseñador de widgets e incluso en versiones recientes con un IDE para ayudar a diseñar el software de Qt.
PySide
PySide es un enlace LGPL a Qt. Está desarrollado por nokia como un reemplazo para el GPL PyQt.
Aunque basado en una tecnología diferente a las vinculaciones PyQt con licencia GPL existentes, PySide intentará inicialmente ser compatible con API. Además de la API compatible con PyQt, se proporcionará una API más Pythonic en el futuro.
wxPython
wxPython es un enlace para Python que utiliza wxWidgets -Framework. Este marco está bajo la licencia LGPL y es desarrollado por la comunidad de código abierto.
Lo que realmente extraño es una buena herramienta para diseñar la interfaz, tienen alrededor de 3, pero ninguno es utilizable.
Una cosa que debería mencionar es que encontré un error en la vista de pestañas a pesar del hecho de que no usé nada avanzado. (Solo en Mac OS X) Creo que wxWidgets no está tan pulido como Qt .
wxPython solo se trata de las clases GUI, no hay mucho más.
wxWidgets usa elementos GUI nativos.
Una ventaja de wxPython sobre Tkinter es que wxPython tiene una biblioteca mucho más grande de widgets entre los que elegir.
Otros
No tengo ninguna experiencia con otros frameworks GUI, tal vez alguien más lo haya hecho.
Pro wxPython
- Muchos tutoriales
- wxGlade como editor: no es perfecto aún, pero puede usarse.
Solo estoy pensando en decir que TKinter es una mierda. Por desgracia, parece que está lleno de Python debido a la compatibilidad con versiones anteriores.
La documentación es horrible. Se ve horrible. Me he encontrado con algunos bichos extraños que realmente bloquearán Python.
Jython .
Jython es una implementación del lenguaje de alto nivel, dinámico, orientado a objetos Python escrito en 100% Pure Java, y perfectamente integrado con la plataforma Java. Por lo tanto, le permite ejecutar Python en cualquier plataforma Java.
Puede usar Swing, Applet u otros marcos de GUI disponibles para la plataforma Java. Consulte los tutoriales de Java para interfaces gráficas de usuario y gráficos 2D . Hay muchos libros y documentation como referencia de API .
Aquí hay una aplicación Hello world Swing de An Introduction to Jython .
from javax.swing import *
frame = JFrame("Hello Jython")
label = JLabel("Hello Jython!", JLabel.CENTER)
frame.add(label)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 300)
frame.show()
Aquí hay un applet Jython de Todd Ditchendorf que muestra el dibujo de partículas con múltiples subprocesos (60 líneas).
from __future__ import nested_scopes
import java.lang as lang
import java.util as util
import java.awt as awt
import javax.swing as swing
class Particle:
def __init__(self,initX,initY):
self.x = initX
self.y = initY
self.rng = util.Random()
def move(self):
self.x += self.rng.nextInt(10) - 5
self.y += self.rng.nextInt(20) - 10
def draw(self,g2):
g2.drawRect(self.x,self.y,10,10)
class ParticleCanvas(awt.Canvas):
def __init__(self,newSize):
awt.Canvas.__init__(self,size=(newSize,newSize))
def paint(self,g2):
for p in self.particles:
p.draw(g2)
class ParticleApplet(swing.JApplet):
def init(self):
self.canvas = ParticleCanvas(self.getWidth())
self.contentPane.add(self.canvas)
def start(self):
n = 10
particles = []
for i in range(n):
particles.append(Particle(150,150))
self.canvas.particles = particles
self.threads = []
for i in range(n):
self.threads.append(self.makeThread(particles[i]))
self.threads[i].start()
def makeThread(self,p):
class MyRunnable(lang.Runnable):
def run(this):
try:
while 1:
p.move()
self.canvas.repaint()
lang.Thread.sleep(100)
except lang.InterruptedException:
return
return lang.Thread(MyRunnable())
Si solo te interesa dibujar líneas y círculos, probablemente puedas reducirlo a la mitad.